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

标签 elasticsearch

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

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


查询:POST http://.../some-index/some-type/_search?size=1
{
  "query":{
    "exists":{
      "field":"data"
    }
  }
}


上面的查询无论如何都将返回0结果。我的猜测是因为默认情况下,Elasticsearch不会在源中存储二进制字段,而“Exists”查询仅查找源。

有没有使用Exists查询的替代方法,理想情况下在映射中不使用额外的 bool(boolean) 字段?

最佳答案

以下操作是否可以满足您的需求?我正在创建一个将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"
                }
            }
        }
    }
}

关于elasticsearch - Elasticsearch:存在对二进制字段的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46718033/

相关文章:

elasticsearch - .keyword上的聚合仅返回包含特定字符串的键

elasticsearch - 如何等待 Elasticsearch 中的重建索引?

elasticsearch - Logstash和ElasticSearch之间的消息丢失

elasticsearch - ElasticSearch-在显式映射中索引和存储字符串字段的属性

elasticsearch - 如何添加和/或作为查询字符串的一部分?

spring-boot - Elasticsearch和Java Spring Boot:java.lang.NoSuchMethodError:

mongodb全文检索策略

elasticsearch - 问题设置集群elasticsearch,总是返回1个节点,配置有什么问题?

react-native - ReactiveSearch如何在加载时停止初始查询

xml - 如何在 logstash 中解析多行 XML?