我正在做輪胎索引查詢使用輪胎和軌道3,我想過濾出已批准=> false的場所,所以我需要某種組合過濾器。ElasticSearch輪胎兩個領域的條件過濾器
下面是該查詢
query = params[:q]
from = params.delete(:from)
size = params[:size] || 25
Tire.search(
[Venue.index_name,
Performer.index_name, User.index_name], load: true) do |s|
s.query do
string(query, fields: [:_all, :name, :title], use_dis_max: true)
end
s.from from if from
s.size size if size
end.results.to_a
這條線將刪除所有表演者和用戶,因爲他們沒有一個:批准場。
s.filter(:term, :approved => true)
而且這條線顯然會消除所有不合適的非場館。
s.filter(:term, { :approved => true, :index_name => 'venues'})
除了向所有用戶和表演者添加已批准:true字段之外的任何想法?我覺得這樣的事情是什麼,我想概念:
s.filter(:term, :approved => true, :if => {:index_name => 'venues'})
編輯感謝Mallox我能找到要建設,但我仍然在努力實現它的輪胎。它看起來像下面的代碼應該工作,但它沒有返回任何查詢結果。我還刪除了「{:terms => {:index_name => [」performers「,」users「]}}」,以確保它不是我使用的索引名稱或多行查詢問題,仍然沒有運氣。任何人都可以通過Tire瞭解如何做到這一點?
s.filter(:bool, :should => [
{:terms => { :index_name => ["performers", "users"]}},
{:term => { :approved => true}},
])
謝謝您的回答。我會加快它的速度,因爲它指向我應該構建這絕對是我需要的。然而,它似乎(我希望我錯了),輪胎有多個嵌套應布爾子句的狡猾的支持。希望有人能幫助我與Tire合作。 – LennonR