我想從Sphinx中檢索數據而不使用查詢關鍵字,但使用其他屬性的過濾器。這些其他屬性是整數。以下是我們索引的屬性:在Sphinx中使用過濾器執行空查詢
id - Integer
keyword - String
keyword_ord - Integer
words - Integer
results - Integer
我們在我們的餐桌大約有300萬個關鍵字,我們試圖通過在獅身人面像使用空查詢來解決這個問題(注:我們正在使用PHP和MySQL)。假設我們想要得到其中有3到6個單詞的關鍵字和那些有3000到10000個結果的關鍵字,那麼我們在PHP中使用Sphinx API的SetFilterRange()函數。
$sphinx->SetFilterRange('words', 3, 6);
$sphinx->SetFilterRange('results', 3000, 10000);
然後執行搜索,我們發送一個空的查詢。
$results = $sphinx->query('');
問題是查詢看起來仍然比我們預期的要慢。您是否認爲有更好的方法可以通過過濾器獲取數據,而不是在Sphinx中發送空查詢?或者,除了獅身人面像之外,還有更好的解決方案嗎?
在我的猜測中,我認爲它很慢的原因是因爲Sphinx必須實際循環遍歷所有3億個關鍵字來查找過濾器下的所有內容。如果指定的查詢中存在關鍵字(而不是空查詢),那麼在索引的幫助下,不必遍歷所有關鍵字,而是跳過不包含關鍵字的行。如果這是原因,那麼除了使用獅身人面像之外,還有一個更好的方法來解決這個問題。
至於我們的服務器硬件規格:
- CPU:英特爾(R)至強(R)CPU E5-2630 0 @ 2.30GHz(8芯)
- 內存:2GB
- 磁盤空間:250GB
我剛剛編譯了C的Sphinx Extension for PHP,這對於大型查詢來說非常棒 - 將處理時間縮短了一半。 http://pecl.php.net/package/sphinx(檢查我的編輯也爲更多的api「修復」) – CrazyVipa