退休弹性搜索多 table/index 搜索

re-tire elastic search multi table/index search

我正在尝试找出使用 elastic.co 进行多 table 搜索的最佳方法。

特别是,我想知道是否可以为这种搜索方法添加更多索引。

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

以上示例在没有 Tables 的情况下仍然有效。如何让它与 tables 一起工作?

如果您要添加更多索引,那么您将远离以模型为中心的搜索。这可能没问题,因为我猜你会以不同的方式处理搜索结果,因为它们来自不同的索引。

在这种情况下,我认为你可以这样做:

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 ...

虽然我还没有尝试过,但我怀疑它是否会起作用 - 再次因为一旦涉及多个索引就无法将结果加载到特定模型中。