0

状況: 私は、英語と中国語のテキスト単語とコーパスとそれらの関係を含む、合計 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 演算子を使用した場合 (破損) は次のようになります。

ここに画像の説明を入力

4

1 に答える 1

1

非 FT 属性によるフィルタリングは遅くなる可能性があります。4 つ以上の一致があるドキュメントを取得しようとしている場合は、クォーラム演算子を使用することをお勧めします。

"get me any document with more than four matches"/4

これには、SPH_MATCH_EXTENDED モードを有効にする必要があります

お役に立てれば。

于 2012-07-14T12:08:28.773 に答える