当前位置: 首页 > 知识库问答 >
问题:

弹性搜索嵌套对象查询

蒯胜泫
2023-03-14

我有一个弹性搜索索引集合,如下所示,

"_index":"test",
"_type":"abc",
"_source":{
       "file_name":"xyz.ex"
       "metadata":{
          "format":".ex"
          "profile":[
                     {"date_value" : "2018-05-30T00:00:00",
                     "key_id" : "1",
                     "type" : "date",
                     "value" : [ "30-05-2018" ]
                      },
                      {
                       "key_id" : "2",
                       "type" : "freetext",
                       "value" : [ "New york" ]
                       }
}

现在我需要通过将key_id与其值匹配来搜索文档。(key_id是一些字段,其值存储在"value"中)例如。对于key_id='1'字段,如果它是value="30-05-2018",则应与上述文档匹配。

我尝试将其映射为嵌套对象,但我无法编写查询来搜索与其相应值匹配的2个或更多的键id。

共有1个答案

沈栋
2023-03-14

我会这样做的。由于要匹配同一父文档中的两个不同嵌套元素,因此需要通过“bool/filter”(或“bool/must”(必须))对每个条件对进行两个嵌套查询,并将其合并在一起。

{
  "query": {
    "bool": {
      "filter": [
        {
          "nested": {
            "path": "metadata.profile",
            "query": {
              "bool": {
                "filter": [
                  {
                    "term": {
                      "metadata.profile.f1": "a"
                    }
                  },
                  {
                    "term": {
                      "metadata.profile.f2": true
                    }
                  }
                ]
              }
            }
          }
        },
        {
          "nested": {
            "path": "metadata.profile",
            "query": {
              "bool": {
                "filter": [
                  {
                    "term": {
                      "metadata.profile.f1": "b"
                    }
                  },
                  {
                    "term": {
                      "metadata.profile.f2": false
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}
 类似资料:
  • 如何获得空数组和美国的结果和

  • 基本问题如下:有没有一种方便的方法可以为嵌套查询的所有字段指定多字段匹配?对于普通查询有效。这在嵌套查询中不起作用,可能是因为嵌套对象没有_all? 下面是更详细的问题: 我有一个名为“Parent”的嵌套文档,如下所示: 这是我用于制作儿童嵌套对象的映射: 这是一个查询,我想使用所有子字段的匹配来选择几个术语查询,以及一个术语查询: 上述查询不起作用,因为我无法为嵌套对象选择多匹配查询中的所有字

  • 我已经为一个问题挣扎了一段时间,所以我想我应该通过stackoverflow来解决这个问题。 “我的文档类型”有一个标题、一个语言字段(用于筛选)和一个分组id字段(我省略了所有其他字段以保持重点) 搜索文档时,我希望找到包含标题中文本的所有文档。对于每个唯一的分组id,我只需要一个文档。 我一直在关注tophits聚合,从我所看到的情况来看,它应该能够解决我的问题。 对我的索引运行此查询时: 我

  • 尝试排除其中一个子文档与查询不匹配的顶级文档。 对于下面的示例,我试图排除其中一个嵌套作业具有并且与匹配的所有文档。但是,由于其中一个嵌套作业文档与和公司匹配,因此返回此文档。我使用的是一个嵌套查询,其中公司名称必须匹配,并且过滤器的当前值为false。我如何才能使以下文件不被退回?

  • 我试图为一个业务场景制定一个查询,其中我们有一个名为“types”的嵌套字段类型(即类似于字符串的ArrayList)。下面是以“类型”作为字段之一的索引文档示例。 文件1:{“类型”:[{“标签”:“对话”,},{“标签”:“暴力”,},{“标签”:“语言”,}} 文档2:{“类型”:[{“标签”:“对话框”,}} 现在,要求搜索查询最多匹配字段值中的一个值,即如果用户搜索“对话框”,那么它应该

  • 我正在尝试使用C#使用Nest进行匹配查询。Match查询不会返回任何结果,因为生成的JSON的语法似乎不正确,我确信有一些文档包含此关键字。下面是C代码片段 这将生成以下查询: 但是,当我在Kibana控制台Get\u search中调整同一查询时,该查询返回0个结果 我得到搜索词的结果。请注意,Kibana查询的语法中缺少“第二个查询标记”。 我确实检查了文档,似乎我的语法是正确的https: