我有一个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索引上运行仅索引扫描?