仅查询图像字段不为空的文档

时间:2018-03-23 18:49:46

标签: elasticsearch

我有以下映射[TB]

**(dynamic strict on the type)**

我想查询存在图像的文档

我尝试了几种组合但到目前为止没有运气。

这是我试过的最后一次

               "created": {
                  "type": "date"
               },
               "images": {
                  "properties": {
                     "checksum": {
                        "type": "text",
                        "index": false
                     },
                     "path": {
                        "type": "text",
                        "index": false
                     },
                     "url": {
                        "type": "text",
                        "index": false
                     }
                  }
               },

但是在这里它表示字段数据不适用于文本字段。无论如何,我可以在不改变映射的情况下做到这一点。

理想情况下,这应该会给我所有没有图像的记录。但这是返回所有记录

POST catalog/_search
{
   "query": {
      "script": {
         "script": "doc['images'].values.length > 0"
      }
   }
}

POST catalog/_search
{
   "query": {
      "script": {
         "script": "doc['images.url'].values.length > 0"
      }
   }
}

以下是有图像的示例文档。

POST catalog/_search
{
   "query": {
       "bool": {
           "must_not": [
              {
                  "exists": {
                      "field": "images"
                  }
              }
           ]
       }
   }
}

更新

通过以下查询,我预计elasticsearch将返回缺少图像的文档

 {
            "_index": "catalog-2018-03-03",
            "_type": "product",
            "_id": "151755703145e27e4983a0bd1b70be44",
            "_score": 1,
            "_source": {
               "merchant": {
                  "link": "http://shophive.com/",
                  "name": "shophive"
               },
               "images": [],
               "updated": "2018-03-18T13:06:33.583480",
               "name": "Plantronics Savi Talk",
               "created": "2018-03-18T13:06:33.583459",
               "url": "http://www.shophive.com/plantronics-savi-talk",
               "price": {
                  "new": 24999,
                  "old": 24999,
                  "discount_percent": 0
               },
               "category": {
                  "level_1": {
                     "url": "computers/tablets/networking",
                     "name": "Computers/Tablets & Networking "
                  },
                  "level_2": {
                     "url": "tablets/ebook-readers",
                     "name": "Tablets & eBook Readers"
                  }
               }
            }
         }

但我收到的结果是我索引中的所有文档,显然每个文档都有一个图像。以下是我通过上述查询获得的示例文档

POST catalog/product/_search
{
   "query": {
      "bool": {
         "must_not": [
            {
               "exists": {
                  "field": "images"
               }
            }
         ]
      }
   }
}

1 个答案:

答案 0 :(得分:0)

您应该省略查询中的方括号,因为您只有一个子句

POST /catalog/_search
{
    "query": {
        "bool": {
            "must_not": {
                "exists": {
                    "field": "images"
                }
            }
        }
    }
}

这将为我返回带有图像的文档,如果只需要有图像的文档

POST /catalog/_search
    {
        "query": {
                    "exists": {
                        "field": "images"
                    }
                }

    }