クエリ拡張は、返される全文検索結果の範囲を広げるために使用されます。次の状況を考えてみましょう。金床について言及しているすべてのコメントを検索したいとします。 anvils という単語が含まれるコメントは 1 つだけですが、たとえ anvils が含まれていない場合でも、検索に関連する可能性のある他のすべての行も検索したいとします。
これもクエリ拡張のタスクです。クエリ拡張を使用する場合、MySQL はデータとインデックスの 2 つのスキャンを実行して検索を完了します:
1. 最初に、基本的な全文検索を実行して、検索条件に一致するすべての行を検索します。2 番目は、MySQL チェックです。これらの一致する行を検索し、有用な単語をすべて選択します (MySQL が有用なものとそうでないものをどのように判断するかについて簡単に説明します)。
3. 次に、MySQL は再び全文検索を実行します。今回は元の条件だけでなく、すべての有用な単語も使用します。
検索している用語が正確に含まれていない場合でも、クエリ拡張を使用して、関連する可能性のある結果を見つけます。
MySQL バージョン 4.1.1 以降でのみ使用します。クエリ拡張機能は MySQL 4.1.1 で導入されたため、以前のバージョンでは使用できません。
クエリ拡張なしの単純な全文検索から始まる例を次に示します。
入力:
select note_text from productnotes where match(note_text) against('anvils');
出力:
分析: 1 行のみに単語 anvils が含まれるため、1 行のみが返されます。
ここではクエリ拡張を使用した同じ検索を示します。
入力:
select note_text from productnotes where match(note_text) against('anvils' with query expansion);
出力:
分析: 今回は 7 行が返されました。最初の行には「anvils」という単語が含まれているため、最高ランクになります。 2行目は anvils とは関係ありませんが、1行目の2つの単語( customer と recommend )が含まれているため、これも取得されます。 3 行目にも同じ 2 つの単語が含まれていますが、テキスト内ではさらに後方にあり、離れているため、この行も含まれていますが、ランクは 3 番目です。 3 行目も、アンビル (製品名) については言及していません。
ご覧のとおり、クエリ拡張により返される行数が大幅に増加しますが、その際、実際には必要のない行数も増加します。
行が多いほど良いテーブル内の行が多いほど (それらの行内のテキストが多いほど)、クエリ拡張を使用して返される結果はより良いものになります。
以上がmysqlクエリ拡張テクノロジーのチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。