PostgreSQL:自动完成最快的索引

dkn*_*ack 2 postgresql full-text-search

我有一张表格,其中包含一栏和一亿行文本。文本是简单的1-5个单词的句子。

我的目标是拥有可以与自动完成功能一起使用的超快速查询。因此,用户类型和我会尽快得到结果。

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

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

Lau*_*lbe 5

如果要用前缀匹配完整文本,则SQL查询为

SELECT words FROM phrases WHERE words LIKE 'user input%';
Run Code Online (Sandbox Code Playgroud)

具有text_pattern_ops操作符类的常规B树索引应该可以解决问题。

如果短语太长而无法被索引,或者您想节省空间,则仅对前缀进行索引和查询:

CREATE INDEX ON phrases (substr(words, 1, 50) text_pattern_ops);
Run Code Online (Sandbox Code Playgroud)

然后用

SELECT words FROM phrases WHERE substr(words, 1, 50) LIKE 'user input%';
Run Code Online (Sandbox Code Playgroud)