首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在弹性搜索中获取数组中所有对象都具有特定值的所有文档

如何在弹性搜索中获取数组中所有对象都具有特定值的所有文档
EN

Stack Overflow用户
提问于 2022-03-01 18:16:51
回答 1查看 337关注 0票数 0

假设我想获取数组字段中所有元素的“状态”不未知的所有文档。

例如:

代码语言:javascript
运行
复制
[
  {
    "type": "object1",
    "list": [
      {
        "node": "1",
        "status": "UP"
      },
      {
        "node": "2",
        "status": "DOWN"
      },
      {
        "node": "3",
        "status": "UNKNOWN"
      }
    ]
  },
  {
    "type": "object2",
    "list": [
      {
        "node": "1",
        "status": "UNKNOWN"
      },
      {
        "node": "2",
        "status": "UNKNOWN"
      }
    ]
  }
]

而且查询应该只返回"object1“文档,因为"object2”列表的所有元素都是未知的。

映射,我已经将它定义为一个嵌套对象,并且我已经可以搜索记录,例如,list.status=UP只想知道如何实现获取文档的用例,其中数组字段中的所有元素都不是某个值。

试过这个

代码语言:javascript
运行
复制
    {
  "query": {
    "bool" : {
      "must_not" : {
        "term" : { "list.status" : "UNKNOWN" }
      }
    }
  }
}

但是,在本例中,上面的查询不返回object1 (不是预期的),而是筛选出object2 (如预期的那样)。

EN

回答 1

Stack Overflow用户

发布于 2022-03-01 18:36:16

您的问题是,即使其中一个嵌套文档匹配,也会返回竞争外部文档。您想要的是,当所有嵌套的文档匹配时,只需要返回外部文档。

为此,文档建议must_not。尝试删除“未知”的文档,然后只使用“向上”和“向下”:

代码语言:javascript
运行
复制
{
  "query": {
    "bool": {
      "must_not": [
        {
          "nested": {
            "path": "list",
            "query": {
              "term": {
                "status": "UNKNOWN"
              }
            }
          }
        }
      ]
    }
  }
}

关于你的更新:你有相反的想法。对于嵌套字段,关联是完整的。对于数组字段的正常对象,关联将丢失。这就是为什么存在嵌套类型。链接

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71312938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档