首页 > 解决方案 > Elasticsearch:不要忽略搜索值的类型

问题描述

我尝试使用这个简单的 JSON 来查询 Elasticsearch:{"query" : {"bool" : {"must" : [{"terms" : {"a" : [1, 2, "3"]}}]}}, "from" : 0, "size" : 1000}

我期望什么结果 - 所有条目,其中是a整数1a整数2字符串a "3"

我知道数据库中的一个字段不能有多种类型,问题是关于查询的。ES 版本是 7.x(默认设置)并且在文档中我的索引a是一个整数。

但是我仍然得到整数a在哪里的结果- 它必须被跳过,如何防止这种行为?我希望 Elasticsearch 尊重值类型并且只返回相同的类型。 3

那可能吗?

标签: elasticsearchelasticsearch-query

解决方案


当您将类型设置a为整数时,3将被强制转换为整数。

3a相反,会抛出一个number_format_exception.


鉴于您的所有a值看起来都是数字的,您可以设置一个严格的映射,以防止字符串首先使用coerce

PUT myindex
{
  "mappings": {
    "properties": {
      "a": {
        "type": "integer",
        "coerce": false
      }
    }
  }
}

Integer value passed as String当你尝试这个时会抛出异常

POST myindex/_doc
{
  "a": "3"
}

推荐阅读