F.17. Модули словарей Hunspell
Эти модули предоставляют словари Hunspell для разных языков. После установки модуля в базу командой CREATE EXTENSION в схеме public появляются объекты конфигурации и словаря текстового поиска.
Таблица F.10. Модули
| Язык | Имя расширения | Имя словаря | Имя конфигурации |
|---|---|---|---|
| Американский английский | 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.17.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)