Многотипный поиск с независимыми фильтрами в elasticsearch


У меня есть отдельный индекс для каждой учетной записи, в котором указаны сопоставления для каждой модели (пользователь и комментарии - просто пример, фактическое приложение имеет много моделей).

include Tire::Model::Search

Tire.index('account_1') do
  create(
    :mappings => {
      :user => {
        :properties => {
          :name => { :type => :string, :boost => 10 },
          :company_name => { :type => :string, :boost => 5 },
          :blocked => { :type => :boolean, :include_in_all => false }
        }
      },
      :comments => {
        :properties => {
          :description => { :type => :string, :boost => 5 }
        }
      }
    }
  )
end

Как добавить фильтр в мой поисковый запрос, чтобы в результатах поиска возвращались только пользователи с заблокированным = > true. это не должно влиять на результаты поиска типа комментариев. Возможно ли это? Есть ли фильтр в elasticsearch, чтобы сделать то же самое?

1 2

1 ответ:

Получил ответ...

Вы можете использовать комбинацию or из not-exists и term filter...

    search_key = 'test'
    Tire.search [account_1] do
      query do
        filtered do
            query { string search_key }
            filter :or, { :not => { :exists => { :field => :blocked } } },
                        { :term => { :blocked => true } }
        end
      end
    end