2017-08-04 60 views
0

我最初的映射已ElasticSearch 5:MapperParserException同時插入數據

{ 
    "vehiclemodel": { 
    "properties": { 
     "price": { 
     "type": "double" 
     } 
    } 
    } 
} 

後來我下面

{ 
    "vehiclemodel": { 
    "properties": { 
     "price": { 
     "type": "double", 
     "fields": { 
      "exShowroomPrice": { 
      "type": "double" 
      } 
     } 
     } 
    } 
    } 
} 

更新的映射現在,當我添加數據1它得到補充,但是當我添加Data2它拋出異常

D ATA1

{ 
    "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.elasticsear[email protected]6e2393ee; line: 1, column: 277]' 
      } 
     } 
    } 
} 

我收藏vehiclemodel兩種類型的數據的MongoDB。我使用mongo連接器來同步數據btw mongo和ES。當我嘗試同步時,我得到以上例外

回答

0

elasticsearch映射中的字段被認爲以不同的方式對相同的字段進行索引,例如將輸入字段處理爲字符串或關鍵字。因此,您將價格定義爲double,但elasticsearch發現{},因此引發此異常。你必須在那裏改造你的數據。

+0

對我來說重塑數據有點困難。那麼是否有更新映射的選項,以便我可以插入兩種類型的數據? –

+0

是的,你可以保留「價格」:加倍,並添加一個簡單的exShowroomPrice:double。 – MartinSchulze

1

您的映射對於我想要實現的內容不正確。

fields映射允許你用相同的字段與不同的分析儀(例如詳細信息請參閱鏈接的文檔)。所以你的情況,你會推

{ 
    "price" : 1923 
} 

和ES將路徑price.exShowroomPrice下存儲了兩次,一次作爲price和一次。

您可以添加一個完全獨立的屬性,層次結構不需要維護。例如像一個映射:

{ 
    "vehiclemodel": { 
     "properties": { 
      "price": { 
       "type": "double" 
      }, 
      "exShowroomPrice": { 
       "type": "double" 
      } 
     } 
    } 
} 

然後發送類似的數據:

{ 
    "price" : 1923 
    "exShowroomPrice" : 1800 
} 

我不知道蒙戈連接器是如何工作的,但應該有這些字段映射我想辦法承擔。

+0

這裏'exShowroomPrice'是一個單獨的字段。在我的情況下,我想'exShowroomPrice'嵌套在'price'下,並且我希望** Data1 **和** Datat2 **都需要插入。這裏是[鏈接](https://stackoverflow.com/questions/40301061/elasticsearch-5-mapperparserexception-with-multi-field),我提到更新我的映射 –

+1

可能不可能,因爲在Data1中'price'是一個double,而在Data2中它是一個對象。 – Slomo