查询嵌套数组中不包含给定对象的文档
Query for documents that do not contain given object in a nested array
我有这样的结构:
{ "id": "object1", "fields": [{"id": 100, "value": "one"}, {"id": 101, "value": "abc"}]}
{ "id": "object2", "fields": [{"id": 100, "value": "two"}, {"id": 101, "value": "cde"}]}
{ "id": "object3", "fields": [{"id": 100, "value": "three"}]}
其中 字段 是一种嵌套 数据类型。
通过嵌套查询,我可以获得所有具有给定字段特定值的对象(例如:field.id = 101 && field.value = "abc" 我可以获得对象 1 ).
如何查询其 字段 数组 不包含 给定字段的对象?
- 示例 1:我想要所有没有 ID 为 101 的字段的对象 -
returns对象3
- 示例2:我想要所有没有字段的对象
ID 为 102 - returns 对象 1、2 和 3
我正在寻找的基本上是一个接受谓词的 exists 查询(然后我可以否定它)。
由于您正在处理嵌套文档,并且您希望如果嵌套文档均不匹配条件,则应将该文档视为匹配项。如果我改写一下,我可以说不要获取具有符合条件的嵌套文档的文档。将其转换为查询 dsl,
GET <index>/_search
{
"query": {
"bool": {
"must_not": [
{
"nested": {
"path": "fields",
"query": {
"term": {
"fields.id": 101
}
}
}
}
]
}
}
}
我有这样的结构:
{ "id": "object1", "fields": [{"id": 100, "value": "one"}, {"id": 101, "value": "abc"}]}
{ "id": "object2", "fields": [{"id": 100, "value": "two"}, {"id": 101, "value": "cde"}]}
{ "id": "object3", "fields": [{"id": 100, "value": "three"}]}
其中 字段 是一种嵌套 数据类型。
通过嵌套查询,我可以获得所有具有给定字段特定值的对象(例如:field.id = 101 && field.value = "abc" 我可以获得对象 1 ).
如何查询其 字段 数组 不包含 给定字段的对象?
- 示例 1:我想要所有没有 ID 为 101 的字段的对象 - returns对象3
- 示例2:我想要所有没有字段的对象 ID 为 102 - returns 对象 1、2 和 3
我正在寻找的基本上是一个接受谓词的 exists 查询(然后我可以否定它)。
由于您正在处理嵌套文档,并且您希望如果嵌套文档均不匹配条件,则应将该文档视为匹配项。如果我改写一下,我可以说不要获取具有符合条件的嵌套文档的文档。将其转换为查询 dsl,
GET <index>/_search
{
"query": {
"bool": {
"must_not": [
{
"nested": {
"path": "fields",
"query": {
"term": {
"fields.id": 101
}
}
}
}
]
}
}
}