使用mongo-connector

时间:2015-05-23 18:49:16

标签: node.js mongodb elasticsearch sails.js

我正在使用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。

1 个答案:

答案 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

在正确命名映射文件和文件夹后,您应该再试一次。