PostgreSQL:最快的自动完成索引

时间:2018-02-23 14:04:30

标签: postgresql full-text-search

我有一个包含一列和一亿行文本的表。 文字很简单,用1到5个单词的句子。

我的目标是拥有一个可以与自动完成功能一起使用的超快查询。所以用户输入并尽可能快地得到结果。

我尝试了许多不同的索引和tsvector功能。

  1. 根据我的需求,什么是好的解决方案/组合?
  2. 我可以使用哪些其他解决方案来实现我的目标并相对快速地进行设置?

1 个答案:

答案 0 :(得分:3)

如果要将整个文本与前缀匹配,则SQL查询将为

SELECT words FROM phrases WHERE words LIKE 'user input%';

使用text_pattern_ops运算符类的常规B树索引应该可以解决问题。

如果短语太长而无法编入索引,或者您想节省空间,则索引和查询只是一个前缀:

CREATE INDEX ON phrases (substr(words, 1, 50) text_pattern_ops);

然后用

查询
SELECT words FROM phrases WHERE substr(words, 1, 50) LIKE 'user input%';