Elasticsearch 7 number_format_exception 将输入值作为字符串

Elasticsearch 7 number_format_exception for input value as a String

我在索引中有字段映射为:

 "sequence_number" : {
          "type" : "long",
          "copy_to" : [
            "_custom_all"
          ]
        }

并将搜索查询用作

POST /my_index/_search
{
  "query": {
    "term": {
      "sequence_number": {
        "value": "we"
      }
    }
  }
}

我收到错误消息:

,"index_uuid":"FTAW8qoYTPeTj-cbC5iTRw","index":"my_index","caused_by":{"type":"number_format_exception","reason":"For input string: \"we\""}}}]},"status":400}
        at org.elasticsearch.client.RestClient.convertResponse(RestClient.java:260) ~[elasticsearch-rest-client-7.1.1.jar:7.1.1]
        at org.elasticsearch.client.RestClient.performRequest(RestClient.java:238) ~[elasticsearch-rest-client-7.1.1.jar:7.1.1]
        at org.elasticsearch.client.RestClient.performRequest(RestClient.java:212) ~[elasticsearch-rest-client-7.1.1.jar:7.1.1]
        at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1433) ~[elasticsearch-rest-high-level-client-7.1.1.jar:7.1.1]
        at

我如何忽略 number_format_exception 错误,所以查询不会 return 任何东西或特别忽略此过滤器 - 两者都可以接受。

提前致谢。

您要找的是不可能的,理想情况下,您应该在您的数字字段上启用 coherce,这样您的索引就不会包含脏数据。

最好的解决方案是在您生成 Elasticsearch 查询的应用程序中(如果您要搜索数字字段,您应该检查 NumberFormatExcepton,因为您的索引不包含第一个中的脏数据如果您在应用程序中遇到异常,请放置并拒绝查询。

编辑: 另一种有趣的方法是在插入 ES 之前验证数据,使用 @prakash 建议的 Validate API,唯一的问题是它会添加另一个网络调用,但如果您的应用程序不是 latency-sensitive,它可以用作解决方法。