我的初始映射是
{
"vehiclemodel": {
"properties": {
"price": {
"type": "double"
}
}
}
}
后来我用下面的
更新了映射{
"vehiclemodel": {
"properties": {
"price": {
"type": "double",
"fields": {
"exShowroomPrice": {
"type": "double"
}
}
}
}
}
}
现在当我添加 Data1 时,它会被添加,但是当我添加 Data2 时,它会抛出异常
数据1 :
{
"price": 36992043
}
Data2 :
{
"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同步数据btw mongo和ES。当我尝试同步时,我得到了上述异常
答案 0 :(得分:1)
您认为您希望实现的映射不正确。
fields映射允许您使用不同的分析器为相同的字段编制索引(有关详细信息,请参阅链接的文档)。所以在你的情况下,你会推
{
"price" : 1923
}
和ES会将其存储两次,一次存储为price
,一次存储在price.exShowroomPrice
路径下。
您可以添加一个完全独立的属性,不需要维护层次结构。例如,映射如:
{
"vehiclemodel": {
"properties": {
"price": {
"type": "double"
},
"exShowroomPrice": {
"type": "double"
}
}
}
}
然后发送如下数据:
{
"price" : 1923
"exShowroomPrice" : 1800
}
我不知道mongo-connector是如何工作的,但应该有一种方法可以映射这些字段。
答案 1 :(得分:0)
弹性搜索映射中的字段被认为以不同的方式索引相同的字段,例如将输入字段作为字符串或关键字处理。因此,您将price定义为double,但elasticsearch会找到{},因此抛出此异常。您必须在那里重新构建数据。