172 похожих чатов

Всем привет! есть таблица с текстовым полем: varchar(200) и другими полями

- 2 млн записей

Есть файл с 5к
записей с возможными ошибками.


Необходимо произвести полнотекстовый поиск по данным из файла.


Включил триграммы.
Выполняю подоьные поиски:

select * from mytable where word_similarity(mykey, mytext) > 0.3 order by word_similarity(mykey, mytext) desc limit 1;


Выполняется такой запрос примерно 30 сек

посоветуйте как можно пересобрать индекс /ускорить?


поможет ли если рапилить таблицу на 2 по 1м

и выполнять поиск параллельно (в ондой и той же БД)?

16 ответов

14 просмотров

1) https://t.me/pgsql/303899 2)Распилить — можэт и могло бы помочь в некоторых (достаточно маргинальных) случаях, только всё равно чтобы понять что у нас тут за случай — надо разобраться с тем, что происходит. И нет, 30 сек поиска на таких данных — это, в среднем, ненормально. Дажэ без индэкса.

Raimbek-Rakhimbekov Автор вопроса
Ilya Anfimov
1) https://t.me/pgsql/303899 2)Распилить — можэт ...

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

Raimbek-Rakhimbekov Автор вопроса
Yaroslav Schekin
> Необходимо произвести полнотекстовый поиск по да...

Яраслов, Спасибо за ответ Да, включил расширение без этого функции similarity, word_similarity не работают необходимо искать наиболее похожую строку без учета порядка слов, насколько понимаю это есть FTS поиграл с операторами %, <%, %> и функциями word_siimilarity, similarity Во всех случаях explain показывает: Parallel Seq Scan что может быть не так? PS: сейчас индекс единственный + таблица содержит только одну колонку типа varchar(200)

Raimbek Rakhimbekov
Яраслов, Спасибо за ответ Да, включил расширение ...

Ярослав сказал вам ведь: индэкс для функцыи word_simliarity модуля pg_trgm создаётся не так, а как -- описано в документацыи, на которую он дал ссылку.

Raimbek Rakhimbekov
Яраслов, Спасибо за ответ Да, включил расширение ...

> необходимо искать наиболее похожую строку без учета порядка слов, насколько понимаю это есть FTS Нет, FTS — это https://www.postgresql.org/docs/current/textsearch-intro.html Вам решать, подходит это или нет. > что может быть не так? https://t.me/pgsql/320014

Raimbek-Rakhimbekov Автор вопроса
Ilya Anfimov
Ярослав сказал вам ведь: индэкс для функцыи word_s...

создал индекс так: create index idx_mt_mk on mytable using gin (mykey); это не по доке?

Raimbek Rakhimbekov
создал индекс так: create index idx_mt_mk on myt...

Процитируйте-ка, где Вы в этой доке такое нашли?! И ведь Вам же уже два человека написали, что нет.

Raimbek-Rakhimbekov Автор вопроса
Yaroslav Schekin
Процитируйте-ка, где Вы в этой доке такое нашли?! ...

Спасибо видимо о gin_trgm_ops речь пересоздам

Raimbek Rakhimbekov
Спасибо видимо о gin_trgm_ops речь пересоздам

На самом деле вы не угадали -- не о нём! Хотя это лучшэ, чем ничего.

Raimbek-Rakhimbekov Автор вопроса
Ilya Anfimov
На самом деле вы не угадали -- не о нём! Хотя это...

Можете таки рассказать 1) сменил тип поля на text 2) пересоздал индекс согласно пункту F.31.4. Index Support explain таки не юзает его :|

Ilya Anfimov
На самом деле вы не угадали -- не о нём! Хотя это...

Почему "не о нём"? Только такие индексы могут хоть как-то использоваться с этим extension. Ну и операторы similarity они поддерживают, в принципе.

Raimbek Rakhimbekov
Можете таки рассказать 1) сменил тип поля на tex...

Ну, в документацыи написано, что конкретно для вашэго случая имеет смысл как раз GIST индэкс. Впрочем, подозреваю, что планировщик не использует индэкс -- потому, что-то ещё там сломано. Дажэ gin должэн помочь.

Raimbek-Rakhimbekov Автор вопроса
Ilya Anfimov
Ну, в документацыи написано, что конкретно для ваш...

попробую gist: Ярослав, explain (analyze, buffers) SELECT mykey, similarity(mykey, 'эпоксидная бежевая') AS sml FROM mytable WHERE mytable.mykey % 'эпоксидная бежевая' ORDER BY sml DESC, mykey

Raimbek Rakhimbekov
попробую gist: Ярослав, explain (analyze, bu...

И это абсолютно другой запрос, чем тот, который вы выполняли вначале...

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта