F.22. Модули словарей Hunspell
Эти модули предоставляют словари Hunspell для разных языков. После установки модуля в базу командой CREATE EXTENSION
в схеме public появляются объекты конфигурации и словаря текстового поиска.
Таблица F.19. Модули
Язык | Имя расширения | Имя словаря | Имя конфигурации |
---|---|---|---|
Американский английский | hunspell_en_us | english_hunspell | english_hunspell |
Нидерландский | hunspell_nl_nl | dutch_hunspell | dutch_hunspell |
Французский | hunspell_fr | french_hunspell | french_hunspell |
Русский | hunspell_ru_ru | russian_hunspell | russian_hunspell |
F.22.1. Примеры
Объекты текстового поиска будут созданы после установки модуля словаря. Мы можем проверить созданную конфигурацию:
SELECT * FROM ts_debug('english_hunspell', 'abilities'); alias | description | token | dictionaries | dictionary | lexemes -----------+-----------------+-----------+---------------------------------+------------------+----------- asciiword | Word, all ASCII | abilities | {english_hunspell,english_stem} | english_hunspell | {ability} (1 row)
Либо вы можете создать собственную конфигурацию текстового поиска. Например, с созданными словарями и словарём Snowball
вы можете получить смешанную русско-английскую конфигурацию:
CREATE TEXT SEARCH CONFIGURATION russian_en ( COPY = simple ); ALTER TEXT SEARCH CONFIGURATION russian_en ALTER MAPPING FOR asciiword, asciihword, hword_asciipart WITH english_hunspell, english_stem; ALTER TEXT SEARCH CONFIGURATION russian_en ALTER MAPPING FOR word, hword, hword_part WITH russian_hunspell, russian_stem;
Создавать смешанные словари можно только для языков с различными алфавитами. Если у двух языков похожие алфавиты, Postgres Pro не сможет определить, какой словарь нужно использовать.
Конфигурация текстового поиска, созданная модулем словаря, непосредственно готова к использованию. Например, так можно искать определённые слова в этом тексте:
SELECT to_tsvector('english_hunspell', 'The blue whale is the largest animal'); to_tsvector ----------------------------------------- 'animal':7 'blue':2 'large':6 'whale':3 (1 row)
Поисковый запрос может выглядеть так:
SELECT to_tsvector('english_hunspell', 'The blue whale is the largest animal') @@ to_tsquery('english_hunspell', 'large & whale'); ?column? ---------- t (1 row)
С такими конфигурациями можно искать текст, применяя индексы GIN или GIST. Например, если существует таблица с индексом GIN:
CREATE TABLE table1 (t varchar); INSERT INTO table1 VALUES ('The blue whale is the largest animal'); CREATE INDEX t_idx ON table1 USING GIN (to_tsvector('english_hunspell', "t"));
Для неё можно выполнить следующий запрос:
SELECT * FROM table1 where to_tsvector('english_hunspell', t) @@ to_tsquery('english_hunspell', 'blue & animal'); t -------------------------------------- The blue whale is the largest animal (1 row)