弹性搜索,对对象数组进行布尔查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了弹性搜索,对对象数组进行布尔查询相关的知识,希望对你有一定的参考价值。

文档具有这样的字段。

"device_versions": [
            {
              "name": "android",
              "min_major_ver": 3,
              "min_minor_ver": 54,
              "min_patch_ver": 0
            },
            {
              "name": "ios",
              "min_major_ver": 2,
              "min_minor_ver": 59,
              "min_patch_ver": 0
            }
          ]

我想写这样的查询

((device_versions.name ='android'AND device_versions.min_major_ver = 3 AND device_versions.min_minor_ver = 55)] >>

我写了以下查询-

"must": [
              {
                "term": {
                  "device_versions.name": "android"
                }
              },
              {
                "range": {
                  "device_versions.min_major_ver": {
                    "from": 3,
                    "include_lower": true,
                    "include_upper": true,
                    "to": null
                  }
                }
              },
              {
                "range": {
                  "device_versions.min_minor_ver": {
                    "from": 55,
                    "include_lower": true,
                    "include_upper": true,
                    "to": null
                  }
                }
              }
            ]

上述查询的问题是:最后一个范围查询与设备名称为'ios'的数组元素匹配

我需要的是:在同一数组元素上应用3个条件。设备=“ android”且min_major_ver = 55 AND min_minor_ver = 55

该文档具有这样的字段。 “ device_versions”:[{“ name”:“ android”,“ min_major_ver”:3,“ min_minor_ver”:54,“ ...

答案

您的映射应启用嵌套,否则您的对象将被展平

以上是关于弹性搜索,对对象数组进行布尔查询的主要内容,如果未能解决你的问题,请参考以下文章

弹性搜索为所有文档添加空值。如何添加完整的对象/类?

如何根据布尔属性对对象数组进行排序?

PostgreSQL 多列索引,包括数组

Elasticsearch改进布尔查询的搜索相关性

Javascript - 如何按 3 种不同的属性类型对对象数组进行排序? (字符串、整数、布尔值)

带有嵌套字段和映射的 Spring Data 弹性搜索