簡體   English   中英

ElasticSearch / Tire-構面是否未通過查詢過濾?

[英]ElasticSearch / Tire - Facets are not filtered by the query?

我有一個附加了構面的ElasticSearch / Tire查詢。 看來,方面是使用全局范圍,而不是查詢范圍和過濾器。

這是我的定義。 我不確定如何確定其范圍以使用過濾器。

 def self.facets_for(keyword_array, fasit, opts = {})
    keyword_array = [keyword_array] if keyword_array.is_a?(String)
    tire.search(per_page: opts[:per_page], page: opts[:page] ) do 
      query do 
        boolean { should { string '*' }}
      end
      filter :terms, :keyword => keyword_array

      facet "phrases" do terms :phrases, :size => 20 end if fasit.include?("phrases")
      facet "sentiment" do terms :sentiment end if fasit.include?("sentiment")
      facet "lang" do terms :lang end if fasit.include?("lang")
      facet "provider" do terms :provider end if fasit.include?("provider")

    end # tire search
  end 

現在,這將返回范圍是“全局”的構面,即它們沒有被過濾器(或查詢(如果有更復雜的查詢))過濾。

我想念什么?

默認綁定(限制)出具的查詢:看輪胎集成測試案例

相反,過濾器不會限制構面,從而使“構面導航”成為可能(同樣,請參見集成測試用例 )。

請注意,在您的示例中,您的查詢實際上是match_all查詢,因此不能限制構面。


從Ruby的角度來看,更安全的keyword_array構造應為:

keyword_array = Array(keyword_array)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM