前:[MySQLは知っておく必要があります(14)] [複合クエリ]
+++++++++++++スタートライン++++++++++++++++
1つは、全文検索を理解する
いくつかの重要な制限:
1。パフォーマンス:ワイルドカードと通常の式の一致では、通常、MySQLがテーブルのすべての行を一致させようとする必要があります。したがって、検索される行の数が増えるため、これらの検索には非常に時間がかかる場合があり
ます。2。明確な制御:ワイルドカードと通常の式の一致を使用すると、一致するものと一致しないものを明確に制御することは困難です。3
。インテリジェントな結果:ワイルドカードに基づくもののまた、通常の式検索は非常に柔軟な検索を提供しますが、結果を選択するインテリジェントな方法を提供することはできません。
次に、全文検索を使用します
全文検索を実行するには、検索する列にインデックスを付け、データの変更に応じて継続的にインデックスを付け直す必要があります。テーブル列を適切に設計した後、MySQLはすべてのインデックス作成と再インデックス作成を自動的に実行します。
インデックス作成後、SELECTをMatch()およびAgainst()とともに使用して、実際に検索を実行できます。
2.1全文検索サポートを有効にする
通常、全文検索はテーブルの作成時に有効になります。CREATE TABLEは、インデックス付き列のコンマ区切りリストを提供するFULLTEXT句を受け入れます。
mysql> CREATE TABLE productnotes
-> (
-> note_id int NOT NULL AUTO_INCREMENT,
-> prod_id char(10) NOT NULL,
-> note_date datetime NOT NULL,
-> note_text text NULL,
-> PRIMARY KEY(note_id),
-> FULLTEXT(note_text)
-> )ENGINE=MyISAM;
データをインポートするときにFULLTEXTを使用しないでください
インデックスの更新には時間がかかりますが、それほど時間はかかりません。最初にすべてのデータをインポートしてから、テーブルを変更してから、FULLTEXTを定義する必要があります。
2.2全文検索を実行する
Match()は検索する列を指定し、Against()は使用する検索式を指定します
mysql> SELECT note_text
-> FROM productnotes
-> WHERE Match(note_text) Against('rabbit');
完全なMatch()命令を使用する
Match()に渡される値は、FULLTEXT()の定義と同じである必要があります。複数の列を指定する場合は、正しい順序でリストする必要があります
前の例は、LIKE句を使用して簡単に完了することもできます。
mysql> SELECT note_text
-> FROM productnotes
-> WHERE note_text LIKE '%rabbit%';
2.4ブールテキスト検索
MySQLは、ブールと呼ばれる別の形式の全文検索をサポートしています
mysql> SELECT note_text
-> FROM productnotes
-> WHERE Match(note_text) Against('heavy' IN BOOLEAN MODE);
重いがロープで始まる単語が含まれていない行に一致します
mysql> SELECT note_text
-> FROM productnotes
-> WHERE Match(note_text) Against('heavy -rope*' IN BOOLEAN MODE);
ウサギと餌を含む行を検索する
mysql> SELECT note_text
-> FROM productnotes
-> WHERE Match(note_text) Against('+rabbit +bait' IN BOOLEAN MODE);
演算子が指定されていません。この検索は、ウサギと餌の少なくとも1つを含む行に一致します
mysql> SELECT note_text
-> FROM productnotes
-> WHERE Match(note_text) Against('rabbit bait' IN BOOLEAN MODE);
ウサギの餌というフレーズに一致する
mysql> SELECT note_text
-> FROM productnotes
-> WHERE Match(note_text) Against('"rabbit bait"'IN BOOLEAN MODE);
ウサギとニンジンを合わせ、前者のレベルを上げ、後者のレベルを下げます
mysql> SELECT note_text
-> FROM productnotes
-> WHERE Match(note_text) Against('>rabbit <carrot' IN BOOLEAN MODE);
2.5全文検索の手順
1.フルテキストデータのインデックスを作成する場合、短い単語は無視され、インデックスから除外され
ます。2。MySQLには使用されていない単語のリストが組み込まれているため、フルテキストデータのインデックスを作成するときにこれらの単語は常に無視されます
。行数が3行未満の場合、全文検索は結果を返しません
。4。単語の単一引用符を無視します
。5。MyISAMデータベースエンジンで全文検索のみをサポートします。
+++++++++++++エンドライン++++++++++++++++