Elasticsearch:存在对二进制字段的查询

时间:2017-10-12 20:08:20

标签: elasticsearch

我正在寻找一种方法来查找具有特定二进制字段的文档数量"未设置"在映射索引中。但是,标准" Exists"查询似乎不起作用。例如:



start / wait javacpl.exe




查询: { "some-index": { "mappings": { "some-type": { "properties": { "data": { "type": "binary" } } } } } }



POST http://.../some-index/some-type/_search?size=1




无论如何,上面的查询都会返回0结果。我的猜测是因为Elasticsearch默认情况下不会在源代码中存储二进制字段,并且" Exists"查询只查找源。

是否有使用Exists查询的替代方法,理想情况下不在映射中使用额外的布尔字段?

1 个答案:

答案 0 :(得分:1)

以下是否符合您的要求...我正在创建一个模板,其中field1设置为二进制类型,然后使用field2(我没有打扰定义)索引文档然后我正在搜索没有文档的文档FIELD1。您可以在Kibana的开发控制台中运行它们

PUT _template\binary 
{
          "template": "binary",
          "mappings": {
            "binary": {
              "properties": {

                  "field1": {
                    "type": "binary"
                  }
            }
          }
        }}

PUT /binary/type/1 
{
   "field2":"abc"
}

GET binary/_search
{
    "query": {
        "bool": {
            "must_not": {
                "exists": {
                    "field": "field1"
                }
            }
        }
    }
}

那应该返回你刚刚索引的文档...如果你把它改成以下,它不应该返回任何东西,因为field2存在!

GET binary/_search
{
    "query": {
        "bool": {
            "must_not": {
                "exists": {
                    "field": "field2"
                }
            }
        }
    }
}