多个弹性搜索过滤器

时间:2013-11-11 18:14:18

标签: ruby-on-rails ruby-on-rails-4 elasticsearch tire

我正在使用Tire for rails来整合elasticsearch。这一点很混乱,我想确保我做得对。

这是我应用多个过滤器的方式吗?我基本上试图检查'mixtape_id IS NULL AND artist_id IS NOT NULL'

  def self.search(query)
    tire.search() do
      query  { string query }
      filter :exists, { field: 'artist_id' }
      filter :not, { exists: { field: 'mixtape_id' } }
    end
  end

这是我的第二次尝试,但似乎仍无效

  def self.search(query)
    tire.search(load: true) do
      query  { string query }
      filter :and, [
        { exists: { field: 'artist_id' } },
        { not: { exists: { field: 'mixtape_id' } } }
      ]
    end
  end

由于

1 个答案:

答案 0 :(得分:0)

我大部分时间都在使用它,我愚蠢地忘记了每次强制重新索引,但叹息。以下是一些利用missing过滤器的清理代码。

  def self.search(query)
    tire.search load: { include: { artist: :attachments } } do
      query  { string query }
      filter :and, [
        { exists:  { field: 'artist_id' } },
        { missing: { field: 'mixtape_id' } }
      ]
    end
  end