在ElasticSearch数组中查找多值元素



我们有一个用户索引,例如

{
   "name": "Eli",
   "cars": [
        { "model": "Honda", "color": "Red" },
        { "model": "Honda", "color": "Blue" },
        { "model": "Toyota", "color": "Red" }
   ]
}
{
   "name": "Don",
   "cars": [
        { "model": "Honda", "color": "Blue" },
        { "model": "Honda", "color": "Black" },
        { "model": "Toyota", "color": "Red" }
   ]
}

我们试图检索所有用户与红色本田,但我们找不到一个方法来做它在ElasticSearch

因为我不知道你使用的是哪个elasticsearch版本,我引用的是当前。

你正在看的是以下内容:

https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-objects.html和https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-mapping.html和https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-query.html

使用嵌套映射,您可以创建如下查询:
{
 "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "cars",
            "query": {
              "bool": {
                "must": [
                  {
                    "term": {
                      "cars.model": "honda"
                    }
                  },
                  {
                    "term": {
                      "cars.color": "red"
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

链接到示例:https://www.found.no/play/gist/91c5a6c8c9fe81928b1cc497f8740a3f(单击run)

请注意,这只在使用嵌套对象时有效!映射必须知道这个

最新更新