【发布时间】:2016-01-15 19:52:50
【问题描述】:
我在“bw-2016-01-15-06-006”索引中有 2 种索引类型 a) Custom_Pattern_1,b) Custom_DataType_2。 对于这两种索引类型,我有两个同名但数据类型不同的字段
- Custom_Pattern_1- Custom_DataType - 字符串
- 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: false和ignore_malformed: true。这是唯一的方法,否则 ES 将接受"12345"(字符串),即使是long类型的字段,只要它可以强制一个适合您的字段的值。
标签: elasticsearch