我們有一個很大的索引,大約有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);用於分頁)?
任何想法都會受到歡迎。