我正在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;
我需要使用自定义词典,因为使用默认的罗马尼亚词干词典会产生不可接受的结果。对于单数和复数形式,有许多词具有不同的词素。
如何使使用字典的查询更快?