PostgreSQL:最快的自动完成索引

PostgreSQL: Fastest Index For Autocomplete

我有一个 table 包含一列和 1 亿行文本。 课文是简单的1-5个单词的句子。

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

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

  1. 什么是适合我需要的 solution/combination?
  2. 我可以使用哪些其他解决方案来实现我的目标并相对快速地设置?

如果你想用前缀匹配完整的文本,SQL 查询将是

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

带有 text_pattern_ops 运算符 class 的常规 B-Tree 索引应该可以解决问题。

如果词组太长无法编入索引或者您想保存space,索引和查询只是一个前缀:

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

然后用

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