节点js中的REST api使用弹性搜索进行全文搜索

时间:2019-01-21 06:42:20

标签: node.js mongodb rest api elasticsearch

我正在使用mongodb作为数据库在节点js中开发REST API。我的数据库架构中有很多模型,例如Province,景点,美食,节日等。在前端,我有一个搜索框,可以从所有这些模型中进行搜索。我已将数据在线存储在mongo地图集中。因此,我想使用弹性搜索从所有模型为我的应用程序构建整个搜索api。

我发现mongodb全文搜索效率不高。并且mongoosastic会自动为弹性搜索建立索引,但是它仅适用于需要从所有模型中进行搜索的单个模型。我没有逐步使用弹性搜索在节点js中构建rest api的方法。我是新手,因此无法从mongo db中的所有模型进行全面搜索。

1 个答案:

答案 0 :(得分:0)

对于开箱即用的解决方案,您可以尝试https://github.com/yougov/mongo-connector-但是,这将要求您运行副本集而不是单个数据库。

如果您想要更多控制,则可以考虑在数据库层中添加代码,一旦成功将其存储在MongoDB中,该代码将(同步或异步)使用对象更新ElasticSearch索引。还要在更新ES索引时处理失败/重试。


最后...如果您需要从所有模型中搜索,也许您应该更多地考虑如何在ElasticSearch中建模数据/为其建立索引。

例如,如果我希望我的用户能够搜索以下名称之一:[省,景点,美食,节日],那么我可以创建一个的索引包含那些“名称”字段以及指向它们所代表的对象的唯一ID。也许multi_match查询可能对此有所帮助。

进一步(仍然假设您只需要搜索“名称”字段),您可以考虑仅将名称/ ID存储在ElasticSearch索引中,然后通过其ID从Mongo检索完整对象。用这种方法编制索引要少得多。