這是可能的,使用過濾查詢,嵌套在布爾查詢。
這個例子說明了基本設置(注意不同的過濾器是如何被使用):
@results = elastic_client.search([:dogs, :cats], {
:bool => {
:should => [
# cats
{
:filtered => {
:query => {
:multi_match => {
:query => 'meow', # repeated, replace with a variable
:type => 'phrase_prefix',
:fields => ['name', 'age']
}
},
:filter => {
:and => [
{ :term => { :owner_id => '123' } },
{ :type => { :value => 'cat' } }
]
}
}
},
# dogs
{
:filtered => {
:query => {
:multi_match => {
:query => 'meow', # repeated, replace with a variable
:type => 'phrase_prefix',
:fields => ['name', 'color']
}
},
:filter => {
:and => [
{ :term => { :kennel_id => '456' } },
{ :type => { :value => 'dog' } }
]
}
}
}
]
}
})
這個特殊的代碼可能會或可能不會與你的ES-客戶端的工作,但它應該給一個相當不錯的主意這個概念。
請注意,查詢「meow」會出現兩次,您可能想要使用一個變量來搜索兩個索引中的同一事物。另外,multi_match
顯然可以是其他類型的查詢。
謝謝!它幫助! –