我最初的映射是
{
"vehiclemodel": {
"properties": {
"price": {
"type": "double"
}
}
}
}
后来我更新了下面的映射
{
"vehiclemodel": {
"properties": {
"price": {
"type": "double",
"fields": {
"exShowroomPrice": {
"type": "double"
}
}
}
}
}
}
现在,当我添加 Data1 时,它将被添加,但是当我添加 Data2 时,它将引发以下异常
数据1 :
{
"price": 36992043
}
数据2 :
{
"price": {
"exShowroomPrice": 36992043
}
}
异常:
{
'index': {
'_index': 'notes',
'_type': 'vehiclemodel',
'_id': 'fb85823a-021b-468c-91d9-8db5f001ee06',
'status': 400,
'error': {
'type': 'mapper_parsing_exception',
'reason': 'failed to parse [price]',
'caused_by': {
'type': 'json_parse_exception',
'reason': 'Current token (START_OBJECT) not numeric, can not use numeric value accessors\n at [Source: org.elasticsearch.common.bytes.BytesReference$MarkSupportingStreamInputWrapper@6e2393ee; line: 1, column: 277]'
}
}
}
}
我的集合
vehiclemodel
在中具有两种数据类型:MongoDB 。我正在使用mongo-connector在mongo和ES之间同步数据。当我尝试同步时,出现上述异常
最佳答案
您的映射与我认为要实现的目标不正确。
fields映射使您可以使用不同的分析器为同一字段索引(例如,请参见链接的文档以获取详细信息)。因此,就您而言,{
"price" : 1923
}
ES会将其存储两次,一次存储为price
,一次存储在price.exShowroomPrice
路径下。
您可以只添加一个完全独立的属性,而无需维护层次结构。例如,像这样的映射:{
"vehiclemodel": {
"properties": {
"price": {
"type": "double"
},
"exShowroomPrice": {
"type": "double"
}
}
}
}
然后像这样发送数据:{
"price" : 1923
"exShowroomPrice" : 1800
}
我不知道mongo-connector的工作原理,但是应该有一种映射这些字段的方法。
关于elasticsearch - ElasticSearch 5:插入数据时发生MapperParserException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45508156/