elasticsearch,tire,Ruby On Rails,Ruby,elasticsearch,Tire" /> elasticsearch,tire,Ruby On Rails,Ruby,elasticsearch,Tire" />

Ruby on rails ElasticSearch/Tire-查询未过滤镶嵌面?

Ruby on rails ElasticSearch/Tire-查询未过滤镶嵌面?,ruby-on-rails,ruby,elasticsearch,tire,Ruby On Rails,Ruby,elasticsearch,Tire,我有一个ElasticSearch/Tire查询,其中附加了面。似乎facets a使用全局范围,而不是查询范围和过滤器 这是我的定义。我不确定如何确定使用过滤器的范围 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], p

我有一个ElasticSearch/Tire查询,其中附加了面。似乎facets a使用全局范围,而不是查询范围和过滤器

这是我的定义。我不确定如何确定使用过滤器的范围

 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 
现在,这将返回范围为“全局”的方面,也就是说,它们不被过滤器过滤(如果有更复杂的查询,也不被查询过滤)

我错过了什么

facet默认情况下由发出的查询绑定(限制):请参阅

相反,过滤器不会限制面,使“面导航”成为可能(请再次参阅)

请注意,在您的示例中,您的查询实际上是一个
match\u all
查询,因此不能限制方面


在Ruby方面,对于
关键字数组
来说,更安全的构造是:

keyword_array = Array(keyword_array)
默认情况下,facet由发出的查询绑定(限制):请参阅

相反,过滤器不会限制面,使“面导航”成为可能(请再次参阅)

请注意,在您的示例中,您的查询实际上是一个
match\u all
查询,因此不能限制方面


在Ruby方面,对于
关键字数组
来说,更安全的构造是:

keyword_array = Array(keyword_array)