我们有一个很大的索引,大约有10亿个文档。我们的应用程序不允许用户搜索所有内容。他们有订阅,他们应该只能在其中搜索。 我们对指数的第一次迭代中使用的属性,因此,典型的查询看上去像这样(我们使用PHP API):具有大量属性的狮身人面像查询
$cl->SetFilter('category_id', $category_ids); // array with all user subscriptions
$result = $cl->Query($term,"documents");
这工作没有问题,但速度很慢。然后我们看到这个article。与未索引的MySQL查询类似是令人震惊的,我们决定放弃基于属性的过滤器并尝试使用全文列。所以现在,我们的category_id是一个full_text列。事实上,我们最初的测试表明,搜索速度要快很多,但是当我们将索引投入生产时,我们遇到了一个问题。有些用户有很多的订阅,我们开始从狮身人面像收到此错误:
Error: index documents: query too complex, not enough stack (thread_stack_size=337K or higher required)
我们新的查询是这样的:
user_input @category_id c545|c547|c549|c556|c568|c574|c577|c685...
当有太多的类别上面的错误出现。我们认为只要将thread_stack提高到更高的值就可以很容易地解决问题,但事实证明它只限于2MB,而且我们仍然有超过这个问题的查询。
问题是现在要做什么?我们正在考虑将查询分解为更小的查询,但是我们如何将结果与正确的限制进行汇总(我们正在使用$ cl-> SetLimits($ page,$ limit);用于分页)?
任何想法都会受到欢迎。