【问题标题】:Search multiple indices at once using Lucene Search使用 Lucene Search 一次搜索多个索引
【发布时间】:2010-10-16 20:31:21
【问题描述】:

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

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

【问题讨论】:

    标签: zend-framework search lucene


    【解决方案1】:

    因此,经过一些研究,您必须使用 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

    【讨论】:

    • 那么如何加载这个类呢?
    【解决方案2】:

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

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

    我切换到 Solr; Solr 不仅在索引期间的执行速度提高了 50 倍,而且对许多查询的执行速度提高了 1000 倍(大多数查询在

    现在,一切都在一个带有“类型”字段的 Solr 索引中;我对每次搜索的索引运行多个查询,每个查询都有一个不同的“type:”过滤查询,一个没有“type:”的“all”选项。

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

    【讨论】:

    • 很高兴看到你也做了我最终做的事情(使用类型字段到字段并使用一个索引)。感谢您提供有关 Solr 的提示,我会检查一下,因为这是我第三次实施 Zend_Lucene,而且我一直不满意。
    • 之前将其标记为答案,但新版本的 ZF 1.8 声称允许跨多个索引进行搜索,尽管我无法在文档中找到它。 (Solr 似乎与我们写的很多东西大相径庭,我很感兴趣,但必须先考虑我的项目)。
    【解决方案3】:

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

    【讨论】:

    • 我之前在搜索中找到了这个链接,但我正在寻找 Zend 解决方案。不过谢谢,因为这确实证实了它可以完成。
    猜你喜欢
    • 2012-02-12
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    相关资源
    最近更新 更多