Текстовый анализ

Прописываем в консоли следующие команды:

sudo apt install myspell-ru

cd /usr/share/postgresql/9.5/tsearch_data

DICT=/usr/share/hunspell/ru_RU

sudo iconv -f koi8-r -t utf-8 -o russian.affix $DICT.aff
sudo iconv -f koi8-r -t utf-8 -o russian.dict  $DICT.dic

Заходим в базу данных, с которой будет осуществляться работа, и вбиваем команды:

CREATE TEXT SEARCH DICTIONARY russian_ispell (
    TEMPLATE = ispell,
    DictFile = russian,
    AffFile = russian,
    StopWords = russian
);

CREATE TEXT SEARCH CONFIGURATION ru (COPY=russian);

ALTER TEXT SEARCH CONFIGURATION ru
ALTER MAPPING FOR hword, hword_part, word WITH russian_ispell, russian_stem;

Каждый раз при входе в базу данных, с которой будет осуществляться работа, прописываю команду:

SET default_text_search_config = 'ru';

Тестирую работу текстового анализатора.

SELECT to_tsvector('ru', 'В большой школе много умных мальчиков и красивых девочек.');

Создаю таблицу для хранения записей учеников.

CREATE TABLE articles (article_id BIGSERIAL PRIMARY KEY, article_creator TEXT, article_content TEXT);

Заполняю созданную таблицу.

INSERT INTO articles (article_creator, article_content) VALUES ('Maxim' , 'Я люблю кушать яблоки и бананы.');
INSERT INTO articles (article_creator, article_content) VALUES ('Maxim' , 'У лошадей есть четыре ноги.');
INSERT INTO articles (article_creator, article_content) VALUES ('Nina' , 'Каждый человек хотел стать художником.');
INSERT INTO articles (article_creator, article_content) VALUES ('Nina' , 'Спорт очень полезен.');
INSERT INTO articles (article_creator, article_content) VALUES ('George' , 'Еда даёт мне силу и энергию.');
INSERT INTO articles (article_creator, article_content) VALUES ('George' , 'Я ем собак и кошек.');

Запрос на вывод всех строк таблицы и результатов текстового анализа.

SELECT article_id, article_creator, article_content, to_tsvector('ru', article_content) FROM articles;

Вывод на экран строк таблицы, у которых поле article_content содержит слова, начальной формой которых является слово лошадь.

SELECT * FROM (SELECT article_id, article_creator, article_content, to_tsvector('ru', article_content), plainto_tsquery('лошадь') @@ to_tsvector(article_content) AS flag FROM articles) AS qqq WHERE flag = true;

Last updated

Was this helpful?