Несколько эластичных фильтров поиска

Я использую 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

Спасибо


person Tallboy    schedule 11.11.2013    source источник


Ответы (1)


У меня в основном это работало все время, я по глупости забывал принудительно переиндексировать каждый раз, хотя вздох. Вот некоторый очищенный код, использующий фильтр 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
person Tallboy    schedule 11.11.2013