【发布时间】:2016-03-12 20:07:36
【问题描述】:
我们网站的 Lucene 搜索速度非常慢且完全无法使用 - 在大约 6,000 条记录中搜索“狗”一词需要 30 秒或更长时间。
我对 Lucene 的搜索和索引完全陌生。
我意识到有很多方法可以优化某些东西。
我已运行分析器并将结果粘贴到此处。
这是大部分时间都在吞噬的索引控制器代码:
JO_Search_Lucene_Search_QueryParser::setDefaultEncoding('UTF-8');
$hits = $index->find($query);
foreach ($hits as $hit) {
$ids[] = $hit->item_id;
}
$index->find($query) 有 4 个实现。如果有用,我可以粘贴这些稍长一些的函数,但这里只粘贴了注释说明作为入门:
第一:
/**
* Performs a query against the index and returns an array
* of JO_Search_Lucene_Search_QueryHit objects.
* Input is a string or JO_Search_Lucene_Search_Query.
*
* @param mixed $query
* @return array JO_Search_Lucene_Search_QueryHit
* @throws JO_Search_Lucene_Exception
*/
秒:
/**
* Performs a query against the index and returns an array
* of JO_Search_Lucene_Search_QueryHit objects.
* Input is a string or JO_Search_Lucene_Search_Query.
*
* @param mixed $query
* @return array JO_Search_Lucene_Search_QueryHit
* @throws JO_Search_Lucene_Exception
*/
第三个:
/**
* Performs a query against the index and returns an array
* of JO_Search_Lucene_Search_QueryHit objects.
* Input is a string or JO_Search_Lucene_Search_Query.
*
* @param mixed $query
* @return array JO_Search_Lucene_Search_QueryHit
* @throws JO_Search_Lucene_Exception
*/
第四:
/**
* Performs a query against the index and returns an array
* of JO_Search_Lucene_Search_QueryHit objects.
* Input is a string or JO_Search_Lucene_Search_Query.
*
* @param mixed $query
* @return array JO_Search_Lucene_Search_QueryHit
* @throws JO_Search_Lucene_Exception
*/
下面是执行“时间”、“自己的时间”和“调用”的快照。任何关于在哪里看的指导都表示赞赏。
【问题讨论】:
-
如果您不发布一些代码,没有人会回答这个问题。请参阅mcve。
-
谢谢@ltrzesniewski,我不知道。我添加了一些代码和 cmets,但是代码太多,我不想重载它。如果有有用的特定代码,我很乐意粘贴更多。发送。
-
你不太明白我的意思。尝试提取一个独立的示例来显示您正在经历的行为。毕竟我们无法调试 cmets :)
-
谢谢@ltrzesniewski。问题是我什至不知道要给你发送哪个代码。 Lucene 嵌入在 Zend 框架之上的 JO 框架中。当我单步执行代码时,它会在 10 多个不同的文件和许多函数之间跳转。我希望个人资料能给某人一个想法,但听起来那是一厢情愿的想法。感谢您抽出宝贵时间回复,如果我们对一些需要帮助的代码进行三角测量,我会通知您。再次感谢!
-
我很好奇您的查询是什么样的,以及您是如何分析这些字段的。这样的表现让我想知道我们是否会针对未分析的字段进行双通配符搜索,或者类似的东西。
标签: php performance search indexing lucene