状況: 私は、英語と中国語のテキスト単語とコーパスとそれらの関係を含む、合計 2mil のレコードを持つ MySQL DB を持っています。2.26GhzのデュアルコアCPUを搭載した1.5GのRAMを搭載した専用サーバー上にあります。30 文字以上の漢字を含む文字列で検索すると、結果が得られるまでに約 4 秒かかります。これは遅すぎます。
検索方法: クエリを実行するときに、一致する単語が 4 つ以上ある場合、クエリが成功したと見なし、結果を関連性で並べ替えて、一致度が最も高いものを選択します。
これが現在どのように行われているかのスニペットです:
$this->sphinx->ResetFilters();
$this->sphinx->SetMatchMode(SPH_MATCH_ANY);
//Sort by relevance
$this->sphinx->SetSortMode(SPH_SORT_RELEVANCE);
$this->sphinx->SetArrayResult(true);
//Get 10 results
$this->sphinx->SetLimits(0,10);
//Filter the length
$this->sphinx->SetFilterRange('en_length', 10,50);
検索のパフォーマンスを向上させるにはどうすればよいですか? できれば1秒以内にしたい。SPH_MATCH_ALL を使用してみましたが、非常に高速に動作します。あいまい一致に使用されている一致モードに問題があると思いますか?
更新: クォーラム演算子を使用すると高速になるはずですが、それを使用すると予期しない値が返されます:
これは、OR 演算子を使用した場合の結果です (通常):
Quorum 演算子を使用した場合 (破損) は次のようになります。