带有大型同义词词典的慢速Postgres搜索

时间:2019-01-30 10:30:30

标签: postgresql full-text-search query-optimization

我正在postgres 11中使用大型同义词词典进行全文搜索,而且速度非常慢(〜1.6s)。数据库中约有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;

我需要使用自定义词典,因为使用默认的罗马尼亚词干词典会产生不可接受的结果。对于单数和复数形式,有许多词具有不同的词素。

如何使使用字典的查询更快?

0 个答案:

没有答案