Mongodb全文搜索和优先事项

时间:2011-11-09 14:50:23

标签: php mongodb codeigniter full-text-search

我打算在我的php应用程序中使用Mongo db构建全文搜索。

全文搜索将悬停集合的文档存储如下:

title: "the title" STRING

description: "the description" STRING

因此,正如Mongo Db官方指南所说,我必须拆分我必须搜索关键字并在新文档字段(_keywords)中推送关键字的字段,这可以在插入语句中完成。

因此,如果我想在标题和说明字段中搜索,我必须将它们分开?

我在文档中只需要1个_keywords:{}字段,或者我需要2个单独的_keywords字段(1个用于标题,1个用于描述)?

然后是否有人可以解释如何在_keywords内搜索时添加某种优先级,甚至哪些是最好的做法(PHP会这样做,Mongo会这样做,其他人会这样做)?

2 个答案:

答案 0 :(得分:3)

Mongodb并不是一个全文搜索引擎,我不会试图让它像一个人一样。从长远来看,它可能会损害您的性能,因为您需要索引这些标记化的关键字,这将成为相当多的数据。由于Mongodb试图将你的索引保留在内存中,这样做会增加你将更多重要数据从内存中推出的机会,从而有效地扼杀你的性能。

相反,请考虑使用Lucene,Solr或ElasticSearch。

我正在使用Solr来支持我的搜索工作,而MongoDB并没有完全削减它。我已经阅读了关于ElasticSearch的很棒的东西 - 看起来你几乎不需要做任何配置,这对于Lucene新手来说非常棒。

编辑: 这个信息与撰写时间一样准确,但MongoDB自此添加了全文搜索功能。您可以在此处详细了解:http://docs.mongodb.org/manual/core/text-search/

我仍然认为对此的支持是作为事后的想法被攻击但是如果您只需要根据匹配关键字返回文档,那么这就足够了。但是,如果您使用的是更强大的搜索工具,Lucene衍生产品仍然是您最好的选择。

答案 1 :(得分:1)

自2.4版开始提供全文搜索

查看@ http://docs.mongodb.org/manual/core/text-search/

  

文本搜索支持在文档中搜索字符串内容   采集。文本搜索引入了新的文本索引类型和新的   文字命令。

     

文本搜索过程:

     

在索引创建期间标记并限制搜索词   和文本命令执行。为每个文档分配一个分数   包含索引字段中的搜索词。分数决定   文档与给定搜索查询的相关性。