我试图找出使用elastic.co进行多表搜索的最佳方法。
特别是,我想知道是否可以为此搜索方法添加更多索引。
Chapter.rb
def self.search(params)
fields = [:title, :description, :content ]
**tables** = [Chapter.index_name, Book.index_name]
tire.search(**tables**, {load: true,page: params[:page], per_page: 5}) do
query do
boolean do
must { string params[:q], default_operator: "AND" } if params[:q].present?
end
end
highlight *fields, :options => { :tag => '<strong>' }
end
上述示例在没有表的情况下有效。如何使它与表一起使用?
答案 0 :(得分:1)
如果您要添加更多索引,那么您将摆脱以模型为中心的搜索。这可能很好,因为我猜你会因为它们来自不同的索引而以不同的方式处理搜索结果。
在这种情况下,我认为你可以这样做:
Tire.search([Chapter.index_name, Book.index_name],
page: params[:page],
... etc ...
) do
query do
... etc ...
end
end
这确实意味着您无法完成load: true
之类的操作,因为您已经不知道要为哪些模型加载结果。
从代码中挖掘(here)看起来你甚至可以为以模型为中心的搜索指定多个索引。类似的东西:
tire.search({
index: [Chapter.index_name, Book.index_name],
load: true,
... etc ...
我还没有尝试过,我怀疑它是否会起作用 - 再次是因为一旦涉及多个索引就无法将结果加载到特定模型中。