我有这3个文档,其中fields
的类型为nested
:
{
"fields": [
{"field_id": 23, "value": "John Doe"},
{"field_id": 92, "value": null}
]
}
{
"fields": [
{"field_id": 23, "value": "Ada Lovelace"},
]
}
{
"fields": [
{"field_id": 23, "value": "Jack Daniels"},
{"field_id": 92, "value": "jack@example.com"}
]
}
我需要在以下位置搜索文档:
(`field_id` = `92` AND `value` is `null`) OR (`field_id` `92` is missing.)
组合术语和缺少查询会导致仅返回
null
值的文档:...
"nested": {
"path": "fields",
"filter": {
"bool": {
"bool": {
"must": [
{
"missing": {
"field": "fields.value"
}
},
{
"terms": {
"fields.field_id": [92]
}
}
]
}
}
}
}
...
我怎样才能做到这一点?
最佳答案
您已经有一个条件的查询。让我们将其称为。对于第二种情况,请检查嵌套文档中的fields.field_id: 92
。可以说这是 B 。但是您的条件是fields.field_id: 92
不应该存在。因此,要在must_not
中将此 B 换行即可。即 B'
所需的是 A或B'
因此,最终查询将是:{
"query": {
"bool": {
"should": [
{
"nested": {
"path": "fields",
"query": {
"bool": {
"must": [
{
"term": {
"fields.field_id": 92
}
}
],
"must_not": [
{
"exists": {
"field": "fields.value"
}
}
]
}
}
}
},
{
"bool": {
"must_not": [
{
"nested": {
"path": "fields",
"query": {
"term": {
"fields.field_id": 92
}
}
}
}
]
}
}
]
}
}
}
关于elasticsearch - 在Elasticsearch中组合嵌套文档中的缺失查询和术语查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54009318/