- 2 млн записей
Есть файл с 5к
записей с возможными ошибками.
Необходимо произвести полнотекстовый поиск по данным из файла.
Включил триграммы.
Выполняю подоьные поиски:
select * from mytable where word_similarity(mykey, mytext) > 0.3 order by word_similarity(mykey, mytext) desc limit 1;
Выполняется такой запрос примерно 30 сек
посоветуйте как можно пересобрать индекс /ускорить?
поможет ли если рапилить таблицу на 2 по 1м
и выполнять поиск параллельно (в ондой и той же БД)?
1) https://t.me/pgsql/303899 2)Распилить — можэт и могло бы помочь в некоторых (достаточно маргинальных) случаях, только всё равно чтобы понять что у нас тут за случай — надо разобраться с тем, что происходит. И нет, 30 сек поиска на таких данных — это, в среднем, ненормально. Дажэ без индэкса.
PostgreSQL 13.2 (Ubuntu 13.2-1.pgdg18.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0, 64-bit Данные - слова русского языка с возможными цифрами и дефисами
> Необходимо произвести полнотекстовый поиск по данным из файла. word_similarity — это не FTS. Что Вам всё-таки нужно? > Включил триграммы. Что это вообще значит? Расширение создали, что ли? > create index idx_mt_mk on mytable using gin (mykey); И он, естественно, не используется. Прочитайте https://www.postgresql.org/docs/current/pgtrgm.html
Яраслов, Спасибо за ответ Да, включил расширение без этого функции similarity, word_similarity не работают необходимо искать наиболее похожую строку без учета порядка слов, насколько понимаю это есть FTS поиграл с операторами %, <%, %> и функциями word_siimilarity, similarity Во всех случаях explain показывает: Parallel Seq Scan что может быть не так? PS: сейчас индекс единственный + таблица содержит только одну колонку типа varchar(200)
Ярослав сказал вам ведь: индэкс для функцыи word_simliarity модуля pg_trgm создаётся не так, а как -- описано в документацыи, на которую он дал ссылку.
> необходимо искать наиболее похожую строку без учета порядка слов, насколько понимаю это есть FTS Нет, FTS — это https://www.postgresql.org/docs/current/textsearch-intro.html Вам решать, подходит это или нет. > что может быть не так? https://t.me/pgsql/320014
создал индекс так: create index idx_mt_mk on mytable using gin (mykey); это не по доке?
Процитируйте-ка, где Вы в этой доке такое нашли?! И ведь Вам же уже два человека написали, что нет.
Спасибо видимо о gin_trgm_ops речь пересоздам
На самом деле вы не угадали -- не о нём! Хотя это лучшэ, чем ничего.
Можете таки рассказать 1) сменил тип поля на text 2) пересоздал индекс согласно пункту F.31.4. Index Support explain таки не юзает его :|
Почему "не о нём"? Только такие индексы могут хоть как-то использоваться с этим extension. Ну и операторы similarity они поддерживают, в принципе.
Ну, в документацыи написано, что конкретно для вашэго случая имеет смысл как раз GIST индэкс. Впрочем, подозреваю, что планировщик не использует индэкс -- потому, что-то ещё там сломано. Дажэ gin должэн помочь.
EXPLAIN чего? Какого именно запроса?
попробую gist: Ярослав, explain (analyze, buffers) SELECT mykey, similarity(mykey, 'эпоксидная бежевая') AS sml FROM mytable WHERE mytable.mykey % 'эпоксидная бежевая' ORDER BY sml DESC, mykey
И это абсолютно другой запрос, чем тот, который вы выполняли вначале...
Обсуждают сегодня