クエリ キーワードを使用せずに、他の属性からのフィルターを使用して Sphinx からデータを取得したいと考えていました。これらの他の属性は整数です。インデックスの属性は次のとおりです。
id - Integer
keyword - String
keyword_ord - Integer
words - Integer
results - Integer
テーブルには約 3 億のキーワードがあり、Sphinx で空のクエリを使用してこの問題を解決しようとしました (注: 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 自体以外にこれに対するより良い解決策はありますか?
私の推測では、遅い理由は、Sphinx が実際に 3 億のキーワードすべてをループして、フィルターに該当するすべてのものを見つけなければならないからだと思います。指定されたクエリに (空のクエリではなく) キーワードがある場合、インデックスの助けを借りて、すべてのキーワードを実行する必要はなく、キーワードを含まない行をスキップします。これが理由である場合、Sphinx を使用する以外に、これを解決するためのより良いアプローチがあるはずです。
サーバーのハードウェア仕様は次のとおりです。
- CPU: Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz (8 コア)
- メモリー: 2GB
- ディスク容量: 250GB