- 这里有没有人有部署真正的在线系统的经验,该系统在任何 NoSQL 数据库中都有全文搜索?
- 例如,MongoDB、Riak 和 CouchDB 中的全文搜索如何比较?
- 我正在寻找的一些指标是易于部署和维护,当然还有速度。
- 他们有多成熟?它们是否可以替代 Lucene 基础架构?
10 回答
现有的“NoSQL”数据库都没有提供可以命名为“全文搜索”的合理实现。尤其是 MongoDB,到目前为止几乎什么都没有(使用正则表达式匹配不是全文搜索,使用 $in 或 $all 运算符对关键字词列表进行搜索只是“全文搜索”的一个非常糟糕的实现)。使用 Solr、ElasticSearch 或 Sphinx 非常简单——在应用程序级别上实现和集成。您的选择很大程度上取决于您的要求和当前设置。
是的。请参阅CouchDB-Lucene,它是一个 CouchDB 扩展,支持对数据的完整 Lucene 查询。
我参与了使用Solandra(基于 Cassandra 的 Apache Solr)的应用程序的开发。根据我的经验,该系统非常稳定,能够处理 TB+ 数据。我个人对这款软件非常满意,原因如下: 1. Cassandra 后端的数据自动分区。2. 丰富的查询能力(得益于 Solr 和 Lucene)。3. 快速读写(写入明显快于读取)。
但是目前 Solandra,我相信不支持批量突变。也就是说,我可以一次插入 100 列到 Cassandra,但是 Solandra 不支持这一点。
对于 MongoDB,目前还没有完整的全文索引功能,但可能在管道中,可能会在 v2.2 中提供。
同时,您可以通过使用字符串数组字段并在其上放置索引来创建简单的倒排索引,如下所述:Mongo 中的全文搜索
或者,您可以在专用的 Solr 或 Lucene 索引中维护一个并行全文索引,如果您感觉非常雄心勃勃,可以直接从 Mongo oplog 复制到您的全文存储。否则,填充两者并与您的应用程序逻辑保持同步。
我刚刚使用存储在MongoDB中的数据完成了这项工作,同时在Sphinx Search中使用了全文引擎。我知道 mongo 在将来的版本中添加全文有一个可投票的问题;但是此时他们没有它。
有几种方法可以将 Mongo 信息插入 sphinx;但是,我发现最幸运的(并且非常容易)是通过xmlpipe2。我花了一点时间才完全理解如何使用它;然而这篇文章:Sphinx xmlpipe2 in PHP有一个出色的演练,它展示了(至少在 PHP 中)如何构建文档,然后如何将它插入 sphinx。
基本上我的配置最终看起来像这样:
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
}
我在这方面取得了巨大的成功;希望你能发现这很有用。
Couchbase 5.0 正在发布基于开源 Bleve 引擎的全文搜索功能。您启用全文索引并开始使用数据库中现有的 JSON 文档。
一些涵盖该主题的幻灯片和演示视频,还提到了 Elasticsearch 和 Lucene... https://www.slideshare.net/Couchbase/fulltext-search-how-it-works-and-what-it-can-do
Solr 可以与 10gen 的 Mongo 连接器一起使用,它允许将数据推送到那里(等等)
https://github.com/10gen-labs/mongo-connector/tree/master/mongo-connector
从他们的例子:
python mongo_connector.py -m localhost:27217 -t http://localhost:8080/solr
如果您使用的是 PHP,那么在 No-SQL 数据库 MongoDB 中进行全文搜索有一个很好的解决方案,名为MongoLantern。http://sourceforge.net/projects/mongolantern/
之前我使用Sphinx+MongoDB进行全文搜索,性能很好但是结果质量很差。使用 MongoLantern,我当前的搜索改进了很多。
MongoLantern 也在 MongoDB 站点中列出。
如果您自己尝试,请告诉我。
克伦斯项目。还有上面没有提到的xapian。我使用 Sphinx,它非常好,但设置起来有点笨拙。我实际上更喜欢通过 XMLPIPE2 将数据从 Mongo 管道传输到 Sphinx,而不是在 sphinx.conf 文件中使用 Sphinx 的 SQL。
绝对是 Solr。它是 NoSQL。
它有:
- 很棒的表现
- 很棒的存储选项
- 词干分析器
- 高亮
- 刻面
- 分布式搜索(SolrCloud)
- 完善的API
- 网络管理员
- HTML、PDF、DOC 索引
- 许多其他功能