NoSQL数据库中的全文搜索

时间:2011-03-28 01:45:21

标签: database full-text-search nosql couchdb riak

  • 这里有没有人有任何部署在任何NoSQL数据库中进行全文搜索的真实在线系统的经验?
  • 例如,MongoDB,Riak和CouchDB中的全文搜索比较如何?
  • 我正在寻找的一些指标是易于部署和维护,当然还有速度。
  • 他们有多成熟?它们是Lucene基础设施的替代品吗?

感谢。

12 个答案:

答案 0 :(得分:10)

现有的“NoSQL”数据库都没有提供可以命名为“全文搜索”的合理实现。到目前为止MongoDB几乎没有任何东西(使用正则表达式进行匹配不是全文搜索,使用$ in或$ on all关键字单词列表中的运算符进行搜索只是“全文搜索”的一个非常糟糕的实现)。使用Solr,ElasticSearch或Sphinx是直截了当的 - 在应用程序级别上实现和集成。您的选择在很大程度上取决于您的要求和当前设置。

答案 1 :(得分:9)

以下是有关Riak Search http://wiki.basho.com/Riak-Search.html的详细信息 并且还有一个presentation

答案 2 :(得分:7)

是。请参阅CouchDB-Lucene这是一个CouchDB扩展,以支持对数据的完整Lucene查询。

答案 3 :(得分:5)

如果我记得的话,MarkLogic有更好的文本搜索选项。这是一个discussion on the topic,虽然它是在他们的博客上,但是来自他们的作家。

答案 4 :(得分:4)

我参与使用Solandra(基于Cassandra的Apache Solr)开发应用程序。根据我的经验,该系统非常稳定,能够处理TB +数据。由于以下原因,我个人对软件非常满意: 1.由于Cassandra后端而自动分区数据。 2.丰富的查询功能(由于Solr和Lucene)。 3.快速读写(写入速度明显快于读取速度)。

然而目前Solandra,我认为不支持批量突变。也就是说,我可以在Cassandra的一次插入中插入100列,但是Solandra不支持这一点。

答案 5 :(得分:3)

对于MongoDB,还没有完整的全文索引功能,但是管道中可能还有一个perhaps due in v2.2

与此同时,您可以使用字符串数组字段创建一个简单的反向索引,并在其上放置索引,如下所述:Full Text Search in Mongo

或者,您可以在专用的Solr或Lucene索引中维护并行的全文索引,如果您真的雄心勃勃地从Mongo oplog直接复制到您的全文商店。否则,填充两者并与应用程序逻辑保持同步。

答案 6 :(得分:1)

我刚刚使用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
}

我在这方面取得了很大的成功;希望你能发现这很有用。

答案 7 :(得分:1)

如果你正在使用PHP,那么在No-SQL数据库MongoDB中有一个很好的全文搜索解决方案,命名为MongoLantern. http://sourceforge.net/projects/mongolantern/

以前我使用Sphinx + MongoDB进行全文搜索,性能很好,但结果质量很差。使用MongoLantern,我目前的搜索得到了很大改善。

MongoLantern is also listed in MongoDB site.

如果你自己尝试,请告诉我。

答案 8 :(得分:0)

cLunce项目。还有上面没有提到的xapian。我使用Sphinx,它非常好,但设置有些笨拙。我实际上更喜欢通过XMLPIPE2将来自Mongo的数据传输到Sphinx,而不是在sphinx.conf文件中使用Sphinx的SQL。

答案 9 :(得分:0)

Solr可以与10gen的Mongo Connector一起使用,它允许在那里推送数据(等等)

https://github.com/10gen-labs/mongo-connector/tree/master/mongo-connector

从他们的例子:

python mongo_connector.py -m localhost:27217 -t http://localhost:8080/solr

答案 10 :(得分:0)

绝对是Solr。这是NoSQL。

它有:

  • 非常棒的表现
  • 非常棒的存储选项
  • stemmers
  • highligting
  • faceting
  • 分布式搜索(SolrCloud)
  • 完美的API
  • 网络管理员
  • HTML,PDF,DOC索引
  • 许多其他功能

答案 11 :(得分:0)

Couchbase 5.0正在发布基于开源Bleve引擎的全文搜索功能。您为全文启用索引并开始使用数据库中的现有JSON文档。

有关该主题的一些幻灯片和演示视频,同时提到了Elasticsearch和Lucene ...... https://www.slideshare.net/Couchbase/fulltext-search-how-it-works-and-what-it-can-do