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

ElasticSearch-在搜索响应中只获得与所有顶级字段匹配的嵌套对象

韩鸿
2023-03-14

假设我有以下文件:

{
    id: 1,
    name: "xyz",
    users: [
        {
            name: 'abc',
            surname: 'def'
        },
        {
            name: 'xyz',
            surname: 'wef'
        },
        {
            name: 'defg',
            surname: 'pqr'
        }
    ]
}

我只想在搜索响应中获得与所有顶级字段匹配的嵌套对象。我的意思是,如果我搜索/筛选名为“abc”的用户,我希望下面的响应

{
    id: 1,
    name: "xyz",
    users: [
        {
            name: 'abc',
            surname: 'def'
        }
    ]
}

我怎么能那么做?

参考:在elasticsearch中从数组中选择匹配的对象

共有1个答案

邵子平
2023-03-14

如果您可以使用除了嵌套的根字段之外的所有根字段,并且只有嵌套字段中匹配的内部命中,那么我们可以通过指定一个稍微涉及更多的源过滤参数来重复使用前面的答案:

{
  "_source": {
    "includes": [ "*" ],
    "excludes": [ "users" ]
  },
  "query": {
    "nested": {
      "path": "users",
      "inner_hits": {        <---- this is where the magic happens
        "_source": [
          "name", "surname"
        ]
      },
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "users.name": "abc"
              }
            }
          ]
        }
      }
    }
  }
}
 类似资料:
  • 问题内容: 假设我有以下文档: 我只想在搜索响应中获取所有顶级字段都匹配的嵌套对象。我的意思是,如果我搜索/过滤名称为“ abc”的用户,则需要以下响应 我怎样才能做到这一点? 问题答案: 如果您可以保留除嵌套字段之外的所有根字段,然后在嵌套字段中仅包含匹配的内部匹配,那么我们可以通过指定稍微复杂一些的源过滤参数来重用之前的答案,例如:

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

  • null 当然有更好的方法吗?

  • 问题内容: 我对ES还是相当陌生,并正在将其用于我的新项目。首先,我为客户提供了一个简单的映射,其中包含名字和姓氏以及付款信息对象列表。如果我在SQL中执行此操作,那将类似于客户表和具有1:许多关系的付款信息表。 这是我要执行的操作的一个简单示例:https : //gist.github.com/anonymous/6109593 我希望根据payInfos嵌套数组中的任何匹配项找到任何客户,即

  • 我试图通过使用术语筛选查找加入2个弹性搜索索引。我查阅了http://www.elasticsearch.org/blog/terms-filter-lookup/和http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-terms-filter.html。这些示例查找像“followers”这

  • 我只需要在文档中的三个字段中搜索一个术语,并根据搜索术语的位置对结果进行排序。例如,找到3个文档:1个在字段2中有搜索词,2个在字段3中有搜索词,3个在字段1中有搜索词。 我想按顺序看:3、1、2。 我以为我可以用助推来做。现在我使用以下方法: 然而,它似乎是,如果我有一个文档与4个词等于搜索词在字段2和另一个文档与1个词在字段1,比后者将有一个较小的分数。 我看到的一个解决方案是为field1和