- 这里有没有人有在任何NoSQL数据库中部署完整文本搜索的实际在线系统经验?
- 例如,在MongoDB、Riak和CouchDB中,全文搜索如何比较?
- 我正在寻找一些指标,例如易于部署和维护以及速度。
- 它们有多成熟?它们可以替代Lucene基础设施吗?
目前不存在任何一种“NoSQL”数据库能够提供一个合理的 “全文搜索” 实现。MongoDB特别缺乏这方面的功能(使用正则表达式匹配不算是全文搜索,使用$in或$all操作符在关键字列表上进行搜索只是一种非常差的“全文搜索”实现)。使用 Solr、ElasticSearch 或 Sphinx 是比较直接的 - 在应用程序级别进行实现和集成。您的选择很大程度上取决于您的需求和当前设置。
我刚刚完成了使用存储在MongoDB中的数据以及将全文搜索引擎放在Sphinx Search中。我知道Mongo将来的版本可能会添加全文检索功能,但目前它们还没有实现。
有几种方法可以将Mongo信息插入到Sphinx中,但我发现最好用的一种(而且非常简单)是通过xmlpipe2。我花了一些时间才完全理解如何使用它,但这篇文章: PHP 中的 Sphinx xmlpipe2 提供了一个出色的教程,展示了如何构建文档,然后如何将其插入到 Sphinx 中(至少在 PHP 中)。
我的配置最终看起来像这样:
source my_source {
type = xmlpipe
xmlpipe_command = /usr/bin/php /www/generateSphinXml.php identifierForMyTable
}
使用我的索引,现在看起来像这样:
index my_index {
source = my_source
path = /usr/local/sphinx/var/data/my_index
docinfo = extern
min_word_len = 1
mlock = 0
morphology = stem_en
charset_type = utf-8 //<----- This is q requirement however.
enable_star = 1
html_strip = 0
min_prefix_len = 2
}
Solr可以与10gen的Mongo Connector一起使用,该工具允许将数据推送到MongoDB中(以及其他数据库)。
https://github.com/10gen-labs/mongo-connector/tree/master/mongo-connector
从他们的例子中:
python mongo_connector.py -m localhost:27217 -t http://localhost:8080/solr
如果您正在使用PHP,MongoDB中有一个名为MongoLantern的No-SQL数据库全文搜索的绝佳解决方案。http://sourceforge.net/projects/mongolantern/
以前我使用Sphinx+MongoDB进行全文搜索,性能非常好,但结果质量很差。使用MongoLantern后,我的当前搜索得到了很大改善。
如果您自己尝试,请告诉我。
毫无疑问就是Solr。它是NoSQL。
它有: