2015-04-20 136 views
1

我試圖找出用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 

上面的例子作品,未經。如何使它與表一起工作?

回答

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

我沒有,雖然嘗試過了,我懷疑它是否會工作 - 因爲不能夠將結果加載到一個特定的模式,一旦多個指標都參與的一次。