【问题标题】:re-tire elastic search multi table/index search退休弹性搜索多表/索引搜索
【发布时间】:2015-04-20 16:07:52
【问题描述】:

我正在尝试找出使用 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

上面的例子在没有表格的情况下也可以工作。如何使它与表格一起使用?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 elasticsearch tire


    【解决方案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 ...
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-31
      • 2016-10-24
      相关资源
      最近更新 更多