【发布时间】:2011-04-05 13:44:04
【问题描述】:
有没有办法通过最好的 N 个结果来限制结果集?如果我使用Zend_Search_lucene::setResultSetLimit(10),我只会得到任何 10 个结果,而不是根据我的排序声明的 10 个最佳结果。
【问题讨论】:
标签: zend-framework zend-search-lucene
有没有办法通过最好的 N 个结果来限制结果集?如果我使用Zend_Search_lucene::setResultSetLimit(10),我只会得到任何 10 个结果,而不是根据我的排序声明的 10 个最佳结果。
【问题讨论】:
标签: zend-framework zend-search-lucene
出于您的目的,您不能使用
Zend_Search_lucene::setResultSetLimit(N)
因为它只为您提供前 N 个元素。
限制结果集
计算成本最高的 搜索的一部分是分数 计算。可能需要几个 大型结果集的秒数(数十 数千次点击)。
Zend_Search_Lucene 给出了 限制结果集大小的可能性 使用 getResultSetLimit() 和 setResultSetLimit() 方法:
$currentResultSetLimit = Zend_Search_Lucene::getResultSetLimit();
Zend_Search_Lucene::setResultSetLimit($newLimit);
默认值0表示'否 限制”。
它没有给出“最好的 N”个结果, 但只有“第一个 N”。
如何仅搜索 10 个结果并将其定义为最佳?您必须搜索整个索引以确定最佳结果。
默认情况下,搜索结果按分数排序。看看文档http://framework.zend.com/manual/1.11/en/zend.search.lucene.searching.html
顺便说一句,无论您使用 zend lucene 做什么,都可以考虑使用其他搜索引擎,例如 Solr。我在许多项目中使用它,我建议使用它。管理起来更快更好。要在 zend 框架项目中使用它,您必须使用 solr php client。
【讨论】:
SELECT * FROM table ORDERBY field ASC LIMIT 10 对整个索引进行排序,但它只返回排序索引中的前 10 条记录。