文档以下面的形式存储在Elastic Research索引中。
映射
{
"mappings": {
"properties": {
"data": {
"type": "nested"
}
}
}
}
第一篇文档
{
"data": [
{
"value": "a"
},
{
"value": "a"
},
{
"value": "b"
}
]
}
第二个文档
{
"data": [
{
"value": "a"
},
{
"value": "a"
},
{
"value": "a"
}
]
}
仅当数组中的所有值均为'a'(第二个文档)时,我才想返回文档
在这种情况下,我应该如何确定查询条件?
答案 0 :(得分:1)
nested query像搜索嵌套字段对象一样对其进行索引 作为单独的文件。如果对象与搜索匹配,则嵌套 查询返回根父文档。
将布尔查询与must
和must_not
结合使用时,它将搜索每个单独的嵌套对象,并消除不匹配的对象,但是如果还有一些嵌套对象,只要与您的查询相匹配,您就会得到结果。
在下面的搜索查询中进行尝试,所有具有嵌套b
值的嵌套对象的文档都将被丢弃。
搜索查询:
{
"query": {
"bool": {
"must_not": {
"nested": {
"path": "data",
"query": {
"term": {
"data.value": "b"
}
}
}
}
}
}
}
搜索结果:
"hits": [
{
"_index": "stof_64329782",
"_type": "_doc",
"_id": "2",
"_score": 0.0,
"_source": {
"data": [
{
"value": "a"
},
{
"value": "a"
},
{
"value": "a"
}
]
}
}
]
结合了多个布尔查询和嵌套查询的搜索查询:
下面的搜索查询还会为您提供所需的结果。
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "data",
"query": {
"bool": {
"must": [
{
"match": {
"data.value": "a"
}
}
]
}
}
}
}
],
"must_not": [
{
"nested": {
"path": "data",
"query": {
"bool": {
"must": [
{
"match": {
"data.value": "b"
}
}
]
}
}
}
}
]
}
}
}