【发布时间】:2016-12-19 18:59:25
【问题描述】:
我开始在我的 rails 项目中使用 pg_search,但我对构建索引感到困惑。
我有一个具有两个属性的模型,我在其中进行全文搜索:标题和描述。目前,我有这个设置:
class Argumentation < ApplicationRecord
include PgSearch
pg_search_scope :searchfor, :against => [:title, :description]
end
这可行,但查询速度很慢。它需要更快,我的第一个想法是添加索引。
有一个专门为全文搜索建立索引的网站:https://github.com/Casecommons/pg_search/wiki/Building-indexes
我想按照指南进行操作,但有些事情让我感到困惑:
1.指南告诉我,在表格中添加一列“tsvector”。
add_column :posts, :tsv_body, :tsvector
但是这行代码不是增加了两列:tsv_body 和 tsvector?或者 tsv_body 是占位符,例如我的描述或标题?
-
之后,应该像这样将索引添加到 tsv_body 中:
add_index(:posts, :tsv_body, using: 'gin')
然后,指南谈到触发器。为什么需要触发器?如果为字符串属性添加索引,则不需要触发器(如果我没记错的话)。
- 在触发器本身中,有“pg_catalog.english”。
create_trigger(兼容性: 1).on(:posts).before(:insert, :update) 做 “new.tsv_body := to_tsvector('pg_catalog.english', coalesce(new.body,''));” 结束
由于我的属性中有多种语言,而不仅仅是英语,我想知道:如果有多种语言,是否甚至可以添加索引?
【问题讨论】: