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

我正在按照这里的示例进行操作:

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" }}
          ]
        }
      }
    }
  }
}

按预期匹配一条记录。相反,假设我只想返回同时具有“John Smith”和“Alice 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”的文档(这应该与原始结果中返回的文档相同)?

Lupanoid

您应该使用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"
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何通过弹性搜索中的特定值查找具有多个字段的内部对象的对象

如何在弹性搜索中获取嵌套对象的数组计数

从数组弹性搜索中删除对象

弹性搜索查询 - 在对象数组中

对数组对象的弹性搜索匹配查询

如何从数组中对所有匹配的对象进行分组,匹配将在多个键上

如何通过属性数组从列表对象中过滤多个对象?

在弹性搜索嵌套对象中应用多个过滤器

如何在弹性搜索中匹配每个数组项的多个字段

搜索对象数组以匹配mongodb中的objectId

如何通过多个条件从数组中拉出多个对象

如何通过对象数组数组中的属性进行映射 - reactjs

如何使用go在弹性搜索中按嵌套对象对文档进行排序?

如何在弹性搜索中按嵌入的对象字段进行过滤

如何从多个数组的匹配中创建对象

如何在Java中使用rest API在弹性搜索中索引对象数组

在 JSON 对象/数组中搜索多个值

如何从文档中的对象数组中仅获取一个与搜索条件匹配的对象?

如何通过多个规则对ArrayList中的对象进行排序

弹性搜索中的匹配数组

如何在弹性搜索中查询嵌套的json对象/字段?

如何在弹性搜索中获取嵌套对象?

如何从对象数组中的对象数组中搜索值?

如何在 Python 中通过该对象的属性显示与我的搜索匹配的整个对象?

如何通过数组中嵌套的子对象对象对对象进行分组

如何从对象数组中搜索“标题”并仅返回与 searchTerm 匹配的对象?

在弹性搜索中存储嵌套对象

Javascript:匹配多个对象数组中的对象 + 别名

在React中获取请求:如何在对象数组内通过对象的JSON数组进行映射?