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

在ElasticSearch文档中搜索嵌套对象的子集

壤驷子安
2023-03-14

假设我有一些用户使用以下文档编制索引:

{
    "name": "Fred Jonsson",
    "age": 24,
    "emails": [
        {
            "active": false,
            "address": "fred.jonsson@burnabyhighschool.ca",
        },
        {
            "active": false,
            "address": "fjonsson4@kpu.ca",
        },
        {
            "active": true,
            "address": "fred@engineeringcorp.com",
        },
        {
            "active": false,
            "address": "fred@jonsson.me",
        },
   }
}

ElasticSearch DSL是否允许我构造一个查询,在该查询中,我可以根据人们的电子邮件地址进行搜索,但前提是该地址处于活动状态?更抽象地说,根据嵌套对象的其他属性搜索文档。

满足此条件的搜索将返回此文档以搜索"fred@jonsson.me""engineeringcorp.com",但在搜索"fred.jonsson@burnabyhighschool.ca"时不会返回此文档。

共有2个答案

赏成益
2023-03-14

例如,如果您想搜索电子邮件:fred。jonsson@burnabyhighschool.ca这是活动的,您可以执行以下操作:

{
  query: {
    nested: {
      path: 'emails',
      query: {
        bool: {
          must: [
            {
              term: {
                'emails.active': true
              }
            },
            {
              term: {
                'emails.address': "fred.jonsson@burnabyhighschool.ca"
              }
            }
          ]
        }
      }
    }
  }
}
归翔
2023-03-14

是的,您只需要对文档发起嵌套查询。在映射中,您需要将“电子邮件”设置为“类型”:“嵌套”。这将为数组中与此父文档关联的每个对象创建“隐藏”文档。

{
   "query": {
      "nested": {
         "path": "emails",
         "query": {
            "bool": {
               "must": [
                  {
                     "term": {
                        "active": {
                           "value": "true"
                        }
                     }
                  },
                  {
                     "match": {
                        "address": "fred@jonsson.me"
                     }
                  }
               ]
            }
         }
      }
   }
}
 类似资料:
  • 问题内容: 我正在尝试使用以下映射搜索文档: 我想在“ naam”,“ omschrijving”等中进行搜索,但也想在嵌套文档“ kenmerken”的动态映射中进行搜索,因此我创建了两个搜索查询,但它们似乎都不起作用。 我应该使用布尔还是过滤器?或两者结合? 我什至靠近吗? 问题答案: 由于需要解决方案,因此我决定创建一个单独的字符串字段,在其中分解“ kenmerken”字段。目前,此方法可

  • 日安: 我目前有以下结构索引<代码>学校- 谢了。

  • 问题内容: 我如何在mongodb文档中嵌套文档的地方搜索文档。例如,我有一组私人消息。每条私人消息都有两个嵌套文档- 一个代表发送用户,另一个代表接收使用。两个嵌套文档的格式均为- userID:34343,名称:Joe Bloggs 我希望能够搜索用户发送的所有邮件(例如,搜索发件人用户的嵌套文档)。 我正在使用Java驱动程序。我是否需要创建一个代表嵌套文档的DBObject? 谢谢 问题答

  • 我正在尝试使用NEST c#客户端搜索我的弹性搜索嵌套对象。我的索引名称是”,我的”字段。 这是我的班级: 现在我的web应用程序看起来像这样: 这里是我需要搜索的单词。 我在浏览器的搜索框(网络表单)中输入它。 搜索关键字可能包含任何需要与我的表人员中的任何字段的值匹配。 如果搜索关键字与嵌套文档匹配,则应返回确切的嵌套文档。 我不知道我的嵌套查询有问题,或者我实际上不知道如何使用嵌套查询来执行

  • 问题内容: 我正在编写资产管理应用程序。它允许用户通过向资产添加html控件(例如文本字段,选择菜单等)来存储任意资产属性。然后,该属性的JSON表示成为存储在beddb中的资产JSON文档的一部分。资产在ouchdb中具有以下结构: 我不确定将属性放入数组是否是允许基于属性值搜索资产的最佳方法。将属性直接附加到资产作为属性会更好吗?我正在用Elasticsearch做实验。如果我尝试按原样存储文

  • 问题内容: 假设我要搜索一系列嵌入式文档或子文档,但将它们的父母作为我的结果返回,例如“建筑物和单元”: 现在假设我要退回所有单位> = 1000平方英尺的建筑物。我该怎么做? 问题答案: 将单位大小存储为数组: 并搜索: