我有两个索引:A
和B
。
A
有以下类型:car
,motorbike
和van
。
B
有以下类型:bus
,car
和pickup
。
我希望能够从motorbike
获得van
和A
以及来自car
的{{1}}和pickup
的单个查询
我想使用B
来执行此操作,目前,我有:
filter
但很明显,这会为两个索引过滤.filter(
not(
should(
termsQuery("key", Seq("car", "bus"))
)
)
)
。我知道我可以为每个索引做两个单独的查询,并为每个索引过滤不同的类型,但我想尽可能避免这种情况。
是否可以在单个查询中执行我要执行的操作?
答案 0 :(得分:0)
你可以这样做。
GET _search
{
"query": {
"bool": {
"should": [
{
"bool": {
"filter": [
{
"term": {
"_index": {
"value": "A"
}
}
},
{
"terms": {
"_type": ["motorbike","van"]
}
}
]
}
},
{
"bool": {
"filter": [
{
"term": {
"_index": {
"value": "B"
}
}
},
{
"terms": {
"_type": ["car","pickup"]
}
}
]
}
}
]
}
}
}
答案 1 :(得分:0)
您可以使用特殊字段_index
和_type
搜索索引和类型,因此一旦您知道这一点,只需将布尔查询放在一起。
search("_all").query(
boolQuery().should(
boolQuery().must(
termQuery("_index", "A"),
termsQuery("_type", "motorbike", "van")
),
boolQuery().must(
termQuery("_index", "B"),
termsQuery("_type", "car", "pickup")
)
)
)