首页 > 解决方案 > 如何在 Elasticsearch 中查询属性具有值的记录?

问题描述

我正在尝试在我的 Elasticsearch 中搜索该字段images具有价值的所有记录?images类型object是。

我尝试了以下

GET /records/_search
{
  "query": {
    "exists": {
      "field": "images"
    }
  }
}

我也尝试了以下

GET /records/_search
{
  "query": {
    "bool": {
      "must": {
        "exists": {
          "field": "images"
        }
      }
    }
  }
}

但以上两个调用返回 0 个命中。

但是,当我执行以下命令时,我得到了一条images有价值的记录

GET /records/_doc/8875352
"images" : [
  {
    "path" : "1/8875352/1.jpg",
    "is_preferred" : false,
    "object_id" : 1
  },
  {
    "path" : "1/8875352/2.jpg",
    "is_preferred" : false,
    "object_id" : 2
  },
  {
    "path" : "1/8875352/3.jpg",
    "is_preferred" : false,
    "object_id" : 3
  },
  {
    "path" : "1/8875352/4.jpg",
    "is_preferred" : false,
    "object_id" : 4
  },
  {
    "path" : "1/8875352/5.jpg",
    "is_preferred" : false,
    "object_id" : 5
  },
  {
    "path" : "1/8875352/6.jpg",
    "is_preferred" : false,
    "object_id" : 6
  },
  {
    "path" : "1/8875352/7.jpg",
    "is_preferred" : false,
    "object_id" : 7
  },
  {
    "path" : "1/8875352/8.jpg",
    "is_preferred" : false,
    "object_id" : 8
  }
]

标签: elasticsearch

解决方案


images您可以使用以下查询找到其中至少有 1 个值的所有记录

{
  "query": {
    "exists": {
      "field": "images.path"
    }
  }
}

或者您可以使用脚本过滤数据

{
  "query": {
    "bool": {
      "filter": {
        "script": {
          "script": {
            "source": "doc['images.path.keyword'].length > 0",
            "lang": "painless"
          }
        }
      }
    }
  }
}

推荐阅读