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

在弹性搜索中,我如何通过对象数组中的多个对象进行匹配?

公羊灿
2023-03-14

我在这里遵循这个例子:

https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html

以下查询:

GET my_index/_search
{
  "query": {
    "nested": {
      "path": "user",
      "query": {
        "bool": {
          "must": [
            { "match": { "user.first": "Alice" }},
            { "match": { "user.last":  "White" }}
          ]
        }
      }
    }
  }
}

与预期的一条记录匹配。假设我只想返回用户为“约翰·史密斯”和“艾利斯·怀特”的文档。

我试过:

GET my_index/_search
{
  "query": {
    "nested": {
      "path": "user",
      "query": {
        "bool": {
          "must": [
            { "match": { "user.first": "Alice" }},
            { "match": { "user.last":  "White" }},
            { "match": { "user.first": "John" }},
            { "match": { "user.last":  "Smith" }}
          ]
        }
      }
    }
  }
}

但这返回零结果。我如何获得同时包含“Alice White”和“John Smith”的文档(这应该只是在原始结果中返回的同一文档)?

共有1个答案

阎德义
2023-03-14

应使用 bool 查询来组合多个子句。使用语法,您正在搜索一个在同一字段中同时具有 Alice 和 John 作为值的文档。试试,确实:

{
  "query": {
    "bool": {
      "should": [
        {
          "nested": {
            "path": "user",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "user.first": "Alice"
                    }
                  },
                  {
                    "match": {
                      "user.last": "White"
                    }
                  }
                ]
              }
            }
          }
        },
        {
          "nested": {
            "path": "user",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "user.first": "John"
                    }
                  },
                  {
                    "match": {
                      "user.last": "Smith"
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}
 类似资料:
  • 在springboot中,您可以拥有一个

  • 如何编写包含两个搜索词的查询,这些搜索词与突出显示内部匹配的嵌套对象。 下面是示例用例: 我有一个映射: 数据如下所示 在这里,如果我想要一个在嵌套文档中同时包含桃子和胡萝卜的文档,我可以使用多个嵌套查询进行搜索,如下所示 上面的查询工作得很好,但是如果我添加内部命中,我不能为两个嵌套查询添加,如果我这样做,我会收到以下错误 

[inner_hits] 已包含键 [项目] 的条目 我想突出显示每

  • 假设mongodb文档(表)“users”为 我想找到1975年必须获得“国家奖章”的人,可能还有其他人在不同的年份获得该奖项。 我怎样才能找到这个人使用奖励类型和年份。所以我可以得到确切的人。

  • 问题内容: 假设mongodb文档(表)“用户”为 我想找到获得“国家奖章”的人,必须在1975年获得该奖。可能会有其他人在不同的年份获得此奖。 如何使用奖励类型和年份查找此人。这样我就可以找到确切的人。 问题答案: 正确的方法是: 允许您在同一数组元素中匹配多个组件。 没有mongo的用户会在1975年代和某些奖项中寻找获得National Medal的用户,但不会寻找1975年获得Nation

  • 问题内容: 有谁知道(如果可能的话,也用破折号)通过对象键对对象数组进行分组然后根据分组创建新的对象数组的方法吗?例如,我有一系列汽车对象: 我想制作一组新的汽车对象,并按以下类别分组: 问题答案: 。简单,并允许在分组结构中的对象中进行一些重复。 但是,OP还要求删除重复的密钥。如果您想一路走下去: 产量: 如果您想使用Underscore.js进行此操作,请注意,其版本称为。