Текстовый анализ
Прописываем в консоли следующие команды:
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?