我正在使用MongoDB,Sails JS和ElasticSearch开发应用程序。
MongoDB用于编写为应用程序检索的记录。 ElasticSearch用于搜索文本和地理位置距离搜索等。
我正在使用mongo-connector来保持我的数据从MongoDB同步到ElasticSearch。
问题是,我无法为存储lat和lon或父/子或分析器等的字段维护geo_point的映射。每次sails服务器被解除时,我在elasticsearch日志中看到所有映射都被删除,创建和更新,我失去了geo_point的映射,它是在每个东西启动并运行后通过REST手动创建的,或者即使我已经在sails js的bootstrap时创建了映射(作为解决方法)。
我还尝试创建一个映射文件并将其放在elasticsearch / config / mappings / index / 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-connector启动并覆盖映射。
截至目前,我只能使这项工作是停止mongo-connector,删除oplog.timestamp文件,启动sails服务器(这里是我删除的bootstrap时间并重新创建该文档的映射)然后启动蒙戈连接器。但是,如果我们踩了一步就会造成事故。
我做错了什么或有没有更好的方法将mongodb同步到elasticsearch而不会丢失自定义映射或替代的mongo-connector。
答案 0 :(得分:1)
根据documentation,如果您在文件系统上安装映射,则该文件必须命名为SELECT s.staffName, s.staffNo, g.grade, g.gradePosition, g.gradeDepartment,
c.catTechnical, c.catOtherTechnical, c.catTechnicalDescription,
c.catOtherTechnicalDescription, c.catWeightage, c.perReqScore, c.perActScore,
c.perAction, c.perOtherAction, c.perTrainingIlsas, c.perTrainingPublic
FROM tblstaff s, tblgrade g, tblcategory c
JOIN tblperformance p on c.catID = p.catID
WHERE s.staffNo = g.staffNo;
,因此在您的情况下,它应该命名为<your_mapping>.json
并放在< / p>
locations.json
或
elasticsearch/config/mappings/_default/locations.json
此外,您的映射文件不应包含elasticsearch/config/mappings/<your_index_name>/locations.json
关键字,它应该如下所示:
mappings
在正确命名映射文件和文件夹后,您应该再试一次。