MongoDB和node.js的全文搜索想法

4
我正在为我的网站开发搜索引擎,希望添加以下功能:
  1. 全文搜索
  2. “你是想说”的功能
  3. 数据存储在MongoDB中
我想创建一个RESTful后端。我将手动向MongoDB添加数据,并对其进行索引(我应该选择哪一个?Mongodb索引还是像Lucene这样的其他搜索索引库)。我还想使用Node.js。这是我从研究中找到的。欢迎提出任何关于架构的建议。
谢谢您的帮助。

你可能想要查看Sphinx - JMM
谢谢您的回复,但我认为sphinx的最新稳定版本在处理mongodb文档id时存在一些问题。您是否曾经使用过将sphinx与mongoDB结合使用? - Hüseyin BABAL
不,我没有。这只是一个非常一般性的建议,作为您解决方案的可能组成部分,以防您不知道它。听起来你比我更了解如何将其与mongoDB集成。 - JMM
我用它来处理MySQL,尝试过在MongoDB上使用。我只是对它进行了一点点的研究。 - Hüseyin BABAL
2个回答

7
我正在使用Node.js / MongoDB / Elasticsearch(基于Lucene)。这是一个非常出色的组合。这三个包都可以将JSON作为本地格式处理(如果需要),因此无需转换DTO等。查看一下: http://www.elasticsearch.org/

感谢您的回复,我也得出了那三个配对,但是你使用“你是指”的功能吗?我也需要它。我认为在Elasticsearch中没有这样的功能。 - Hüseyin BABAL
是的,你说得对,他们正在等待Lucene 4.0发布后再实施它:https://github.com/elasticsearch/elasticsearch/issues/911 - Geert-Jan
谢谢,我也有同样的疑惑。我会等待那个版本发布。 - Hüseyin BABAL
请问您能否发布一个简单的教程或一些指导,介绍如何将Elasticsearch添加到Node.js + MongoDB中? - Marwan Roushdy
我和@MarwanRoushdy一起,有没有将这三个东西联系在一起的示例文档? - Warz
1
也许将来会有所改变,但现在可以通过http/rest与ES进行交流。只需在Node中使用HTTP相关内容或使用https://github.com/phillro/node-elasticsearch-client作为一个不错的库。我的方法是在ES中执行搜索查询,并检索docids。然后使用这些docids在mongoDB中进行多键获取。这使得ES保持精简(除了需要在Mongo中获取的id之外,无需存储任何东西),减少了数据存储(mongodb和ES)同步的问题等。希望对你有所帮助。 - Geert-Jan

2

我个人使用Sphinx和MongoDb,这是一个很好的组合,我没有遇到任何问题。

我将MongoDB备份到一个MySQL实例中,Sphinx快速地对其进行索引。由于你永远不需要主动索引_id,因为我不知道谁会知道您的对象之一的_id以进行搜索,所以您只需将其作为字符串字段存储在MySQL中即可正常工作。

当我从Sphinx中取回结果时,我只需将其转换为(在PHP中)一个新的MongoId,或者在您的情况下是ObjectId,然后简单地查询此对象ID的其余数据即可。这再简单不过了,没有问题,没有麻烦,什么都没有。而且我可以将重新索引增量索引的负载分配给我的MySQL实例,让我的MongoDB实例处理它需要处理的内容:为用户提供美味的数据。


谢谢您的回复,我会尝试使用Sphinx和MongoDB。 - Hüseyin BABAL
1
@cubuzoa np,一个建议; 如果你和我一样使用MySQL连接器,请确保将MySQL的默认自增id作为Sphinx Delta索引的关键字。我目前会推荐使用Delta索引而非实时索引。 - Sammaye

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接