【问题标题】:Getting Exception while running Stats-Aggregation in Elasticsearch 1.6在 Elasticsearch 1.6 中运行 Stats-Aggregation 时出现异常
【发布时间】:2016-01-15 19:52:50
【问题描述】:

我在“bw-2016-01-15-06-006”索引中有 2 种索引类型 a) Custom_Pattern_1,b) Custom_DataType_2。 对于这两种索引类型,我有两个同名但数据类型不同的字段

  1. Custom_Pattern_1- Custom_DataType - 字符串
  2. Custom_DataType_2 - Custom_DataType - 长

我在查询下方运行聚合。

POST bw-2016-01-15-06-006/Custom_DataType_2/_search
{
  "from" : 0,
  "size" : 100,
  "aggregations" : {
        "Custom_DataType" : {
          "extended_stats" : {
            "field" : "Custom_DataType"
          }
        }
      }
}

虽然我只在“bw-2016-01-15-06-006”索引中的 Custom_DataType2 上运行查询,其中 Custom_DataType 很长,但它应该已经返回了结果。但我正在低于 ClassCastException。

{
   "error": "SearchPhaseExecutionException[Failed to execute phase [query], all shards failed; shardFailures {[-lo5bj-4TLOcyZwfl6oPyA][bw-2016-01-15-06-006][0]: ClassCastException[org.elasticsearch.index.fielddata.plain.PagedBytesIndexFieldData cannot be cast to org.elasticsearch.index.fielddata.IndexNumericFieldData]}{[-lo5bj-4TLOcyZwfl6oPyA][bw-2016-01-15-06-006][1]: ClassCastException[org.elasticsearch.index.fielddata.plain.PagedBytesIndexFieldData cannot be cast to org.elasticsearch.index.fielddata.IndexNumericFieldData]}{[-lo5bj-4TLOcyZwfl6oPyA][bw-2016-01-15-06-006][2]: ClassCastException[org.elasticsearch.index.fielddata.plain.PagedBytesIndexFieldData cannot be cast to org.elasticsearch.index.fielddata.IndexNumericFieldData]}{[-lo5bj-4TLOcyZwfl6oPyA][bw-2016-01-15-06-006][3]: ClassCastException[org.elasticsearch.index.fielddata.plain.PagedBytesIndexFieldData cannot be cast to org.elasticsearch.index.fielddata.IndexNumericFieldData]}]",
   "status": 500
}

我仍在使用 Elasticsearch 1.6,根据文档,一个索引可以有 2 个具有不同数据类型的同名字段。 有人可以帮我解决这个问题吗

【问题讨论】:

  • 如果您索引了一个文档,其 Custom_DataType 字段是字符串中的长数字(即用双引号括起来的数值,例如 "12345"),就会发生这种情况。 long 值 12345 可以在索引时从字符串中推断出来并作为 long 索引,但字段数据可能仍被视为字符串。您能否验证您从未在该字段中索引字符串?如果可能,请擦除您的索引并正确地重新索引您的数据。
  • 我已经确认了映射。一种类型是字符串,另一种类型是长。而且我也正确放置了数据。
  • 如果您想 100% 确定您的映射不接受伪装成字符串的数字,您需要指定 coerce: falseignore_malformed: true。这是唯一的方法,否则 ES 将接受 "12345"(字符串),即使是 long 类型的字段,只要它可以强制一个适合您的字段的值。

标签: elasticsearch


【解决方案1】:

花了一些时间,但我终于找到了我正在寻找的article。我记得前段时间读过这个。由于 Lucene 存储文档的方式,您不能在不同的索引中使用不同的数据类型命名完全相同的字段。这实际上是 0.9.2 中的一个问题,但我完全可以想象它一直存在到 1.x 版本中,可能值得一试。

【讨论】:

    猜你喜欢
    • 2015-04-18
    • 2018-06-23
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多