Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Zend framework 使用Lucene搜索一次搜索多个索引_Zend Framework_Search_Lucene - Fatal编程技术网

Zend framework 使用Lucene搜索一次搜索多个索引

Zend framework 使用Lucene搜索一次搜索多个索引,zend-framework,search,lucene,Zend Framework,Search,Lucene,我正在使用Zend_Search_Lucene来实现站点搜索。我为不同的数据类型创建了单独的索引(例如,一个用于用户,一个用于帖子等)。结果同样按数据类型划分,但有一个“全部”选项,该选项应显示不同结果类型的组合。可以一次搜索不同的索引吗?或者我必须在all索引中索引所有内容吗 更新:ZF 1.8的版本表明现在可以在ZF 1.8中实现,但我无法在文档中找到它的位置 我不知道它是如何与Zend集成的,但在Lucene中,人们会使用a,而不是通常的IndexSearcher。这正是我处理搜索的方式。

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


更新:ZF 1.8的版本表明现在可以在ZF 1.8中实现,但我无法在文档中找到它的位置

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

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

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

我换成了Solr;Solr不仅在索引过程中执行速度快50倍,在许多查询中执行速度快1000倍(大多数查询在<5毫秒内完成,所有查询在<100毫秒内完成),它的功能更强大。此外,我们能够在30分钟内从头开始重建100000多个文档索引(低于20小时)

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


如果你打算将索引增加到100+MB,你每分钟至少会收到一些搜索请求,或者你想提供任何类型的高级搜索功能,我强烈建议你放弃Zend_search_Lucene。

因此,经过一些研究后,你必须使用Zend_search_Lucene_Interface_Multisearch。在撰写本文时,我在文档中没有看到任何关于它的提及,但是如果您查看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

我以前在搜索中找到过此链接,但我正在寻找Zend解决方案。不过还是要谢谢你,因为这确实证实了这是可以做到的。很高兴看到你也做到了我最后所做的事情(使用一个类型字段到一个字段,并使用了一个索引)。感谢关于Solr的提示,我将查看它,因为这是我第三次实现Zend_Lucene,而且每次我都不满意。之前将此标记为答案,但ZF 1.8的新版本声称允许跨多个索引搜索,尽管我在文档中找不到它。(Solr似乎与我们所写的很多东西有很大的不同,我很感兴趣,但必须先考虑我的项目)。那么,如何加载这个类呢?