2015-05-23 42 views
1

我正在開發一個使用MongoDB,Sails JS和ElasticSearch的應用程序。Elasticsearch映射與蒙哥連接器在帆船上丟失

MongoDB用於寫入爲應用程序檢索的記錄。 ElasticSearch用於搜索文本和地理位置距離搜索等。

我使用mongo連接器來保持我的數據從MongoDB到ElasticSearch同步。

問題是,我無法保存geo_point的映射,用於存儲經緯度或父/子或分析器等的字段。每次啓動服務器時,我都會在elasticsearch日誌中看到所有映射都被刪除,創建和更新,並且我失去了geo_point的映射,這是通過REST手動創建的,每個東西都啓動並運行後,或者即使我已經在sails js的引導時創建映射(作爲解決方法)。

我也試圖創建一個映射文件,並把它放在elasticsearch /配置/映射/指數/ mymapping.json但我得到一個錯誤

Caused by: org.elasticsearch.index.mapper.MapperParsingException: Root type mapping not empty after parsing! Remaining fields: ... 

在這裏,我嘗試了所有的組合,使這項工作但沒有成功例如

{"mappings" : { 
     "locations" : { 
      "dynamic": "false", 
      "properties":{ 
       "location": { 
        "type": "geo_point" 
       } 
      } 
     } 
    } 
} 

使用模板來創建映射也試過,但在蒙戈連接器後踢和覆蓋映射。

截至目前,我只能夠使這項工作是停止mongo連接器,刪除oplog.timestamp文件,啓動sails服務器(這裏在引導時間,我刪除並重新創建該文檔的映射),然後啓動mongo連接器。但是,如果我們放棄了一步,這會造成意外。

我在做任何錯誤的事情,還是有更好的方式來同步mongodb到elasticsearch,而不會丟失自定義映射或替代mongo連接器。

回答

1

按照documentation,如果你在文件系統上安裝一個映射,該文件必須命名爲<your_mapping>.json所以在你的情況下,它應該被命名爲locations.json,並放置無論是在

elasticsearch/config/mappings/_default/locations.json 

elasticsearch/config/mappings/<your_index_name>/locations.json 

此外,你映射文件不應該包含mappings關鍵字,它應該看起來像這樣:

{ 
     "locations" : { 
      "dynamic": "false", 
      "properties":{ 
       "location": { 
        "type": "geo_point" 
       } 
      } 
     } 
    } 

正確命名映射文件和文件夾後,應該再試一次。