当前位置: 首页 > 知识库问答 >
问题:

Rails ElasticSearch轮胎过滤器多参数嵌套字段

澹台新知
2023-03-14

我有一个电影模型和一个搜索页面,有一个电影流派方面。可以在搜索页面上的每个方面附近选择一个复选框。我将选中的方面术语列表传递给控制器,我希望筛选电影集合只包括那些用复选框选择了类型的电影。

我的带有索引和搜索定义的模型是:

class Movie < ActiveRecord::Base
  include Tire::Model::Search
  include Tire::Model::Callbacks

  mapping do
    indexes :id,           :index    => :not_analyzed
    indexes :title,        :analyzer => 'snowball', :boost => 100
    indexes :description,  :analyzer => 'snowball'
    indexes :genres do
      indexes :title, analyzer: 'keyword'
    end
  end

  def to_indexed_json
    to_json( include: { genres: { only: [:title, :id] } } )
  end

  def self.search(params={})
    tire.search(page: params[:page], per_page: 5, load: false) do
      query do
        all
        #boolean do
        #  must { string params[:query], :default_field => 'title' }
        #end
      end


      #filter 'genres.title', :values => params[:genres] if params[:genres].present?
      filter :terms, 'genres.title' => ['Genre 1', 'Genre 2', 'Genre 3']


      facet 'global-genres', global: true do
        terms 'genres.title', size: 15
      end
      facet 'scoped-genres' do
        terms 'genres.title', size: 15
      end
    end
  end

  attr_accessible :description, :title, :year, :genres

  has_and_belongs_to_many :genres, :uniq => true

end

我不确定这部分应该怎么改写:

#filter 'genres.title', :values => params[:genres] if params[:genres].present?
filter :terms, 'genres.title' => ['Genre 1', 'Genre 2', 'Genre 3']
#filter 'genres.id', :values => [1, 2, 3]

稍后,我将把流派列表或流派ID作为参数传递,我需要对它们进行筛选。

filter :terms, 'genres.title' => ['Genre 1', 'Genre 2', 'Genre 3']

它过滤到有‘类型1'或’类型2'或‘类型3'的电影,我需要这些类型和逻辑。

我怎样才能正确地做到这一点?

共有1个答案

郎刚捷
2023-03-14

您需要使用execution:'和'来设置筛选器。我已经将此作为示例添加到轮胎集成测试套件中:

s = Tire.search('articles-test') do
  query { all }
  filter :terms, :tags => ['ruby', 'python'], :execution => 'and'
end
 类似资料:
  • 问题内容: 我有带有嵌套字段的文档,如下所示: 嵌套字段的映射如下所示: 在切换到elasticsearch 2之前,我有一个带有aggs的查询,该查询计算了没有结果的文档。这是查询的聚合部分: 现在我切换到elasticserach 2,它只计算所有文档。我已经尝试过其他操作,例如计算所有文档和计算结果,以便可以减去结果,但是 总是0 如何正确过滤/计数嵌套字段? 问题答案: 如果您要计算产生结

  • 问题内容: 我正在尝试通过轮胎/elasticsearch实现“类似作用域”的功能。为什么即使我有状态为“ Test1”或“ Test2”的条目也不能正常工作?结果始终为空。 该方法在没有过滤器的情况下工作良好。过滤器方法有问题吗?我已经检查了轮胎doku。 谢谢!:) 问题答案: 您的问题很可能是由于对该字段使用默认映射而引起的,该映射会将其标记化-小写,拆分为单词等。 比较这两个: 您的解决方

  • 问题内容: 我在ng-table中有一张发票清单,希望能够对嵌套属性进行过滤。json看起来像这样; 我的看法是这样的 我想让过滤工作于client.fullname。如何过滤嵌套属性? 更新资料 我找到了一种解决方法,将嵌套字段放入非嵌套的JSON元素中,在上面的示例中,我创建了一个JSON [‘client_name’]元素并将其分配给rails模型中的client.fullname。然后,筛

  • 我有一个带有嵌套数据的ES索引,它是这样映射的 我想创建一个对两个(原始)值进行筛选的查询。我可以创建一个筛选器,对这些值之一进行筛选,如下所示: 然而,我需要的是这样的东西: 第一个查询有效,第二个查询引发错误: 嵌套:QueryParsingException[[ocm][nested]筛选器不支持[null]]; 如何创建匹配多个路径中的字段的筛选器?

  • 问题内容: 我有一个这样的文档模型: 一个客户可以有0个,1个或多个订单,一个订单可以有0个,1个或多个orderLines (这是我为这个问题创建的模型,因为我认为这是每个人都可以理解的数据,因此,如果发现任何错误,请让我知道,但不要让他们分散我的实际问题) 我想使用NEST创建一个查询,该查询选择一个(或所有)具有customer.id特定值的客户,但前提是他们至少具有一个具有特定articl

  • 问题内容: 使用嵌套对象的布尔运算符时遇到一些麻烦。这是我的映射: 我想获取恰好包含两个指定ip甚至更多的文档。 假设我的文档具有以下ips: 我想通过使用此过滤器进行搜索来仅检索DOC 1: 问题在于,同时检索了DOC 1和DOC2。 问题答案: 你可以使用你的条件过滤器是这样的: 这是我用来测试的一些代码: http://sense.qbox.io/gist/d6b5f4e4c0d2977a0