使用Postgres仅索引扫描GIN索引实现自动完成搜索

时间:2016-04-26 18:53:40

标签: ruby-on-rails postgresql indexing

我有一个Ruby on Rails应用程序,它访问包含名为statements的表的Postgres数据库。该表有一个名为statement_text的文本字段,使用以下表达式进行GIN索引:

CREATE INDEX index_statement_text ON statements USING gin (to_tsvector('simple'::regconfig, COALESCE(statement_text, ''::text)));

我创建了一个表单来搜索statement_text字段的内容,结果搜索成功使用GIN索引显示结果。

我现在正试图更进一步实现自动完成 - 即当用户在搜索表单中键入最少的4个字符时(例如" yank"),文本框将显示基于索引中所有匹配的tsvectors的自动填充建议的下拉列表(例如," yankees")。

每次执行此操作时,Postgres不仅扫描索引("位图索引扫描")而且还查询statement_text字段本身("位图堆扫描") ,这是完全不必要和相对缓慢的:我不希望它实际上拉领域,只是tsvectors。

如何强制Postgres在此GIN索引上运行仅索引扫描?

0 个答案:

没有答案