2013-07-27 7 views
0

У меня есть модель публикации, в которой есть избиратели. в Elastic Search я проиндексировал Post, так что у меня есть следующие данные примера: name: 'My first post', voter_ids: [1,2,3]. Я пытаюсь искать сообщения, чтобы получить результаты только для данного voter_ids. Например, если поиск говорит 1,2, я хочу получить My first post в результатах поиска с тех пор, как у него есть voter_ids 1 и 2, но если поиск 1,5, я не должен видеть это сообщение в результатах, поскольку избиратель 5 никогда не голосовал на этом посту. следующий код возвращает все сообщения, на которые указана какая-либо из указанных избирателей. так что это похоже на OR-ing. То, что я ищу, - это И.шина эластичный фильтр поиска по ассоциации ids

@posts = Post.search(load: true) do |tire| 
    tire.filter :terms, :voter_ids => voter_ids 
end 

ответ

3

Создать эквивалент этого:

"filter" : { 
    "terms" : { 
     "voter_ids" : ["1", "2"], 
     "execution" : "and" 
    } 
} 

From reading the elasticsearch docs есть execution параметр на terms фильтр, который можно установить, чтобы быть and.

Удачи вам!