2013-01-02 63 views
0

我有一個附加Facet的ElasticSearch/Tire查詢。它看起來是使用全局作用域的方面,而不是查詢範圍和過濾器。ElasticSearch/Tire - Facets未被查詢過濾?

這是我的定義。我不知道如何確定它的使用範圍。

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 

眼下,這將返回方面,在範圍是「全球性」,即它們不是由過濾器過濾(或查詢是否有一個更復雜的查詢)。

我錯過了什麼?

回答

4

方面默認情況下由發出的查詢綁定(限制):請參閱Tire integration test case

過濾器,相反,做而不是限制方面,使「分面導航」成爲可能(再次,請參閱integration test case)。

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


對事物的紅寶石方面,爲keyword_array一個更安全的構造將是:

keyword_array = Array(keyword_array)