我有很多文档,其数据如下所示:
"paymentMethods": [
{
"id": 194,
"name": "Wire",
"logo": "wire.gif"
}, {
"id": 399,
"name": "Paper Check",
"logo": "papercheck.gif"
}
映射:
"paymentMethods": {
"type": "nested",
"properties": {
"id": {
"type": "long"
},
"logo": {
"type": "string",
"index": "not_analyzed"
},
"name": {
"type": "string",
"index": "not_analyzed"
}
}
}
我尝试获取所有包含paymentMethos.id 399& 194。 这个查询对我有用:
"query": {
"filtered": {
"filter": {
"bool": {
"must": [{
"nested": {
"path": "paymentMethods",
"query": {
"bool": {
"must": [
{
"term": {
"paymentMethods.id": 399
}
}
]
}
}
}
}]
}
},
"query": {
"match_all": {}
}
}
}
问题是我需要所有ID为399&的文件。 194 所以我试了一下:
"must" : [
{ "terms":{"paymentMethods.id" : [399,194]} }
]
但是结果有点或者我想要它作为AND。 我也试过这个,但它根本不起作用
"must" : [{
"term": {
"paymentMethods.id": 399
}
}, {
"term": {
"paymentMethods.id": 194
}
}]
任何建议如何获得paymentMethods.id 399& 194?
感谢。
答案 0 :(得分:0)
{"query": {
"bool": {
"must": [
{
"nested": {
"path": "paymentMethods",
"query": {
"term" : { "paymentMethods.id":399 }
}
}
},
{
"nested": {
"path": "paymentMethods",
"query": {
"term" : { "paymentMethods.id":187 }
}
},
等。
在我尝试使用"条款"进行搜索之前它返回带有任何匹配条款的文档,因此我得到了187或399的文档
上面的代码查询嵌套的隐藏文档两次一次为187次,一次为399次并返回两个查询的交集=>所有187和& 399
(当然第二个查询不再在所有文档上运行,而是在前一个过滤结果的结果上运行)