在长文本字段上使用PostgreSQL Trigram进行缓慢的模糊搜索

时间:2019-07-06 00:11:56

标签: database postgresql performance full-text-search

当我在PostgreSQL中相对较小的一组记录(8k)上执行模糊文本搜索时,看到的查询很慢(约20秒)。我已经设置了GIN和GIST Trigram索引,并通过ANALYZE确认正在使用它们。表现似乎是由少数具有非常长的文本字段的记录驱动的。虽然大多数记录的字符数都不超过2k,但大约有200个字符数超过10k,少数字符数超过20k。将这些长字符串截断为10k个字符可将查询时间缩短为8s。

我尝试了PostgreSQL 10和11,GIN和GIST索引,但性能没有实质性的改变。

我尝试将文本内容分成大量的记录,每个记录要小得多。搜索分布在更多记录中的相同文本会导致亚秒级查询。

查询完全没有异常:

select title, 
'orthopedic surgeon' <<-> content as sml
from answers
where 'orthopedic surgeon' <% content
order by sml desc

有了这么少的记录,即使我的文本字段具有30k +个字符,我也希望Trigram索引能够提供近乎即时的结果。我不希望通过将内容分散到更多记录中来提高查询速度。这种表现正常吗?

0 个答案:

没有答案