使用Lucene Search一次搜索多个索引

时间:2009-04-01 12:16:47

标签: zend-framework search lucene

我正在使用Zend_Search_Lucene来实现网站搜索。我为不同的数据类型创建了单独的索引(例如,一个用于用户,一个用于帖子等)。结果类似地按数据类型划分,但是有一个'all'选项应该显示不同结果类型的组合。是否可以一次搜索不同的指数?或者我必须索引所有索引中的所有内容吗?

更新:ZF 1.8的readme表明现在可以在ZF 1.8中进行,但我无法在文档中找到它的位置。

3 个答案:

答案 0 :(得分:7)

因此,经过一些研究,你必须使用Zend_Search_Lucene_Interface_MultiSearcher。在撰写本文时,我没有在文档中看到任何提及,但是如果你看一下ZF 1.8中的实际类,那么它很容易使用

$index = new Zend_Search_Lucene_Interface_MultiSearcher();
$index->addIndex(Zend_Search_Lucene::open('search/index1'));
$index->addIndex(Zend_Search_Lucene::open('search/index2'));
$index->find('someSearchQuery');

注意它不遵循PEAR语法,所以不能使用Zend_Loader :: loadClass

答案 1 :(得分:3)

这正是我处理huddler.com搜索的方式。我使用了多个Zend_Search_Lucene索引,每个数据类型一个。对于“all”选项,我只是有另一个索引,其中包含所有索引中的所有内容 - 所以当我将文档添加到索引时,我将它们添加两次,一次添加到相应的“type”索引,一次添加到“all” “索引。与其他Lucene实现相比,Zend Lucene严重不足,所以这是我发现的最佳解决方案。您会发现Zend的端口仅支持lucene查询语法的一个子集,并且很差 - 即使在中等索引(10-100 MB),简单的查询,如“a *”,或引用的短语也无法充分执行(如果在所有)。

当我们将一个大型网站带到我们的平台上时,我们发现Zend Lucene无法扩展。我们的索引大约达到1.0 GB,简单查询最多需要15秒。有些查询花了一分钟或更长时间。从头开始构建索引大约需要20个小时。

我换了Solr; Solr不仅在索引期间执行速度提高了50倍,而且对于许多查询执行速度提高了1000倍(大多数查询都以<5ms完成,所有查询都以&lt; 100ms完成),它的功能更强大。此外,我们能够在30分钟内(从20小时开始)从头开始重建100,000多个文档索引。

现在,一个Solr索引中的所有内容都带有“type”字段;我针对每个搜索对索引运行多个查询,每个查询使用不同的“type:”过滤查询,而对于“all”选项则不使用“type:”。

如果您计划将索引增加到100多MB,每分钟至少会收到一些搜索请求,或者您希望提供任何类型的高级搜索功能,我强烈建议您放弃Zend_Search_Lucene。

答案 2 :(得分:2)

我不知道它如何与Zend集成,但在Lucene中,我会使用MultiSearcher,而不是通常的IndexSearcher。

相关问题