ホームページ >データベース >mysql チュートリアル >MySQL全文検索チュートリアル
インデックス作成後、Match() と Against() の 2 つの関数を使用して全文検索が実行されます。Match() は検索する列を指定し、Against() は使用する検索式を指定します。
例を示します:
入力:
select note_text from productnotes where match(note_text) against('rabbit');
出力:
分析: この SELECT ステートメントは、単一の列 note_text を取得します。 WHERE 句により、全文検索が実行されます。 Match(note_text) は、指定されたカラムに対して検索するように MySQL に指示し、Against('rabbit') は検索テキストとして単語 Rabbit を指定します。 2 行に Rabbit という単語が含まれているため、これら 2 行が返されます。
Match() の完全な説明を使用する Match() に渡される値は、FULLTEXT() 定義と同じである必要があります。複数の列を指定する場合は、それらを正しい順序でリストする必要があります。
検索は大文字と小文字を区別しません BINARY モードが使用されない限り、全文検索では大文字と小文字が区別されません。
実際、今の検索は以下に示すように LIKE 句だけで完了できます:
入力:
select note_text from productnotes where note_text like '%rabbit';
出力:
分析: この SELECT ステートメントも 2 つの行を取得しますが、順序が異なります(常にそうであるとは限りませんが)。
上記の 2 つの SELECT ステートメントには、ORDER BY 句が含まれていません。後者 ( LIKE を使用) は、特に有用ではない順序でデータを返します。前者 (全文検索を使用) は、テキストの一致度によって並べ替えられたデータを返します。どちらの行にも Rabbit という単語が含まれていますが、3 番目の単語として Rabbit という単語を含む行は、20 番目の単語として Rabbit という単語を含む行よりも上位にランクされています。これは重要。全文検索の重要な部分は、結果を並べ替えることです。ランクの高い行が最初に返されます (これらは実際に必要な行である可能性が高いため)。
並べ替えがどのように機能するかを示すために、次の例を見てください:
入力:
select note_text match(note_text) against('rabbit') as rank from productnotes;
出力:
分析: ここでは、Match() と Against() が SELECT の代わりに使用されています。 WHERE 句。これにより、すべての行が返されます (WHERE 句がないため)。 Match() と Against() は、全文検索によって計算されたランク値を含む計算列 (エイリアス付き Rank ) を作成するために使用されます。ランクは、行内の単語の数、一意の単語の数、インデックス全体の単語の合計数、および単語を含む行の数に基づいて MySQL によって計算されます。ご覧のとおり、rabbit という単語を含まない行のランクは 0 です (したがって、前の例の WHERE 句によって選択されません)。 「rabbit」という単語を含む 2 行にはそれぞれランク値があり、テキスト内の単語の前の行のランク値は単語の後の行よりも高くなります。
この例は、全文検索で行がどのように除外されるか (ランク 0 の行が除外される)、結果がどのように並べ替えられるか (ランクによって降順に並べ替えられる) を示すのに役立ちます。
複数の検索語を並べ替える 複数の検索語を指定した場合、一致する単語の大部分を含む行は、含まれる単語が少ない (または 1 つだけ一致する) 行よりも高いランク値を持ちます。
ご覧のとおり、全文検索には、単純な LIKE 検索ではできない機能が備わっています。また、データにはインデックスが付けられているため、全文検索は非常に高速です。
以上がMySQL全文検索チュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。