Медленный поиск по postgres с большим словарем синонимов - PullRequest
0 голосов
/ 30 января 2019

Я использую большой словарь синонимов в postgres 11 для полнотекстового поиска, и он очень медленный (~ 1.6с).В базе данных ~ 150 строк.Такая же продолжительность только для одного ряда.

Словарь содержит ~ 600 000 синонимов.

Запрос такой:

SELECT id, ts_rank(index_full, to_tsquery('ro', :searchTerm)) as relevance 
FROM asistent 
WHERE index_full @@ to_tsquery('ro', :searchTerm) 
ORDER BY relevance 
DESC LIMIT 100

Существует индекс GIN для index_full:

CREATE INDEX pgweb_idx_full
  ON public.asistent
  USING gin
  (index_full);

но запрос медленный даже с одной строкой в ​​таблице, поэтому индекс не является проблемой.

Запросы, которые я использовал для создания / использования словаря (dex в запросах) это:

CREATE EXTENSION unaccent;

CREATE TEXT SEARCH DICTIONARY ro (
   TEMPLATE = pg_catalog.simple,
   STOPWORDS = romanian
);

CREATE TEXT SEARCH DICTIONARY dex (
    TEMPLATE = synonym,
    SYNONYMS = dex
);


CREATE TEXT SEARCH CONFIGURATION RO (COPY = romanian);
ALTER TEXT SEARCH CONFIGURATION RO
  ALTER MAPPING FOR asciiword, asciihword, hword_asciipart, hword, hword_part, word
  WITH unaccent, dex, ro;

Мне нужно было использовать пользовательский словарь, потому что использование словаря румынского языка по умолчанию дает недопустимые результаты.Есть много слов с разными лексемами для форм единственного и множественного числа.

Как я могу сделать запросы, использующие словарь быстрее?

...