如何查询包含两个键值对的文档" key1" - " value1"和" key2" - " value2"?我似乎无法找到相关文档。
我尝试了下面的查询,但即使应该有匹配的文档也不会返回结果。尽管如此,替换必须使用,但是当我将minimum_should_match = 100%时,它也不会返回任何结果。
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "attributes",
"query": {
"bool": {
"must": [
[
{
"match_phrase": {
"attributes.key": "key1"
}
},
{
"match_phrase": {
"attributes.value": "value1"
}
}
],
[
{
"match_phrase": {
"attributes.key": "key2"
}
},
{
"match_phrase": {
"attributes.value": "value2"
}
}
]
]
}
}
}
},
[
{
"match_all": {
}
}
]
]
}
}
}
这是映射的样子:
{
"index_name": {
"mappings": {
"type_name": {
"properties": {
"attributes": {
"type": "nested",
"properties": {
"key": {
"type": "string",
"analyzer": "flat"
},
"value": {
"type": "string",
"analyzer": "flat"
}
}
}
}
},
}
}
}
非常感谢你的帮助。
答案 0 :(得分:1)
试试这个:
POST /test_index/_search
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [
{
"nested": {
"path": "attributes",
"query": {
"bool": {
"must": [
{
"term": {
"attributes.key": "key1"
}
},
{
"term": {
"attributes.value": "value1"
}
}
]
}
}
}
},
{
"nested": {
"path": "attributes",
"query": {
"bool": {
"must": [
{
"term": {
"attributes.key": "key2"
}
},
{
"term": {
"attributes.value": "value2"
}
}
]
}
}
}
}
]
}
}
}
}
}
以下是我用来测试的代码(我刚用standard
分析器,因为我不知道你的flat
分析器是什么样的;所以你可能需要调整它:
http://sense.qbox.io/gist/13b7e2aa4d90bfb2f82787c6a00494ee3343e013
答案 1 :(得分:0)
我遇到了与Elastic 5相同的问题并且不得不稍微调整推荐的答案以使其工作,因为过滤的查询已被弃用。 (没有收到为[过滤]注册的[查询])。
使用Elastic 5,以下结构为我解决了这个问题:
{
"query" : {
"bool" : {
"must" : [
{
"nested" : {
"path": "attributes",
"query" : {
"bool" : {
"must" : [
{ "term" : { "attributes.key" : "key1" } },
{ "term" : { "attributes.value" : "value1" } }
]
}
}
}
},
{
"nested" : {
"path" : "attributes",
"query" : {
"bool" : {
"must" : [
{ "term" : { "attributes.key" : "key2" } },
{ "term" : { "attributes.value" : "value2" } }
]
}
}
}
}
]
}
}
}