mysql検索の簡単な応用


どのようにMySQLの中でより良い全文検索結果を得られますか?   作者: Techrepublic.com.com  2006-04-03 11:14:53  多くのインターネットアプリケーションは全文検索機能を提供しています。ユーザーは検索項目として単語または単語の断片を使ってマッチング記録を見つけることができます。バックグラウンドでは、これらのプログラムはSELECTクエリ中のLIKE文を使用してこのようなクエリを実行します。このような方法は実行可能ですが、全文検索にとって、これは効率が極端に低い方法です。特に大量のデータを処理する時に。MySQLはこの問題に対して,ビルディングに基づく全文検索方式の解決策を提供している。ここでは、開発者は単に全文検索を必要とするフィールドをランドマークし、専用のMySQL方法を使用してそれらのフィールドで検索を実行するだけでなく、性能と効率を向上させる(MySQLはこれらのフィールドにインデックスを作成して検索を最適化するため)だけでなく、MySQLは自然言語を使用して結果をインテリジェントに評価するため、より高い品質の検索を実現します。を選択します。この記事はMySQLで全文検索を行う方法について説明します。1、基本テーブルの設定は、例テーブルの作成から始まり、以下のSQLコマンドを使用します。mysql。 CREATE TABLE review (id。 INT(5) PRIMARY KEY NOT NULL AUTO_INCREMENT、 ダタ TEXT);以上のコマンドは簡単な音楽専門集データベースを作成しました。(主に段落全体のテキストです。)この表にいくつかの記録を追加します。 INSERT INTO `review` (`id` `data` VALES(1, 'Gingerboy ハイ a. new single out caled Throwing ロック. It's great!');mysql> INSERT INTO `review` (`id` `data` VALES  (2, 'ハロー all、 I really like the new Madonna single.  One 保存先 the ホスト トラック currently playing…I've been listening ト it all. day;mysql> INSERT INTO `review` (`id` `data`)VALES (3, 'Have あなた heard the new バンド Hotter セイン ハイThe すばらしい ファイブ メンバー and they バーン their instruments when they プレイ in concerts.  The se グース totally ロック Like awesome dude検証データの正確な入力:mysql> SELECT * FROM reviews;+-----------------------------------------------------+| id。 | ダタ                                       | +----+--------------------------------------------+ |  1 | Gingerboy ハイ a. new single out caled ...  | |  2 | ハロー all、 I really like the new Madon ... | |  3 | Have あなた heard the new バンド Hotter セイン… | +----+--------------------------------------------+ 3 ローソン in セット (0.00 sec)2、全文検索フィールドを定義します。次に、全文検索インデックスとしてフィールドmysqlを定義します。 ALTER TABLE review ADD FLLTEXT インデックス (データQuery OKです 3 ローソン affected (0.21 sec)Records: 3  Dupliccates: 0  Warnings: 0 SHOWを使う インデックスが追加されていることを確認するINDEXESコマンドです。 ショー INDEXES FROM reviews;+-------------------------------------------------------------------------------+| テーブル   | コロムン.name   | Packed | Null | Index_タイプ | コメント | ----------+---------------+--------+------+------------+---------+ | review |  id。           | NULL   |      | BTREE      |         | | review |  ダタ         | NULL   | YES  | FLLTEXT   |         | +---------+---------------+--------+------+------------+---------+ 2 ローソン in セット (0.01 3、全文検索を実行します。データと索引を持っていれば、MySQLの全文検索ができます。最も簡単な全文検索方式はMATCH...AGAINST文を持つSELECT検索です。以下は簡単な例です。単語を含む「single」の記録を検索できます。mysql。 SELECT id。 FROM review WHERE MATCH (ダタ) AGAINST ('single;+--++| id。 | +----+ |  1 | |  2 | +----+ 2 ローソン in セット (0.00 ここでMATCH()は、パラメータとしてそのフィールドに伝達された文字をAGAINST()に伝達されたパラメータと比較し、一致があれば、通常の方法で戻ってくる。一つ以上のフィールドを渡すことができます。MATCH()で確認してください。­-フィールドリストをコンマで分割します。MySQLが全文検索の要求を受けたとき、それは内部で各記録を採点し、不一致の記録点数はゼロであり、「より関連している」記録は「あまり相関していない」記録よりも高い点数を得る。相関はMySQLの一連の区分基準によって決定され、MySQLのユーザーマニュアルを見るとより多くの情報が得られる。各記録の採点を見たいですが、MATCH()方法だけを返して結果集の一部として、以下のようにします。 SELECT id MATCH (ダタ) AGAINST ('ロック FROM reviews;+-------------------------------+| id。 | MATCH (ダタ) AGAINST ('ロック | +----+-------------------------------+ |  1 |                             0 | |  2 |                             0 | |  3 |               1.36251 4533815 | +----+-------------------------------+ 3 ローソン in セット (0.00 sec)4、論理検索修飾子(Boolean)を使用する search modifiers)また、AGAINST文に特殊なINを追加することにより、論理検索修飾子を使用してより正確な検索を行うことができます。 BOOLEAN MODE修飾子は、以下の例では単語を含む「single」を検索しますが、「Madonna」の記録はありません。 SELECT id。 FROM review WHERE MATCH (ダタ) AGAINST ('+single -madonna IN BOOLEAN MODE;+--++| id。 | +----+ |  1 | +----+ 1 row in セット (0.00 sec)この検索特性は通常、単語の断片を検索するために用いられます。 BOOLEAN MODE文の中の*(星号)オペレータが実装していますが、以下の例では、単語に「hot」が含まれているレコードを検索する方法を示しています。 SELECT id。 FROM review WHERE MATCH (ダタ) AGAINST ('ホット* IN BOOLEAN MODE;+--++| id。 | +----+ |  3 | |  2 | +----+ 2 ローソン in セット (0.00 sec)このような方法を使用して、少なくとも一つのAGAINSTに渡されたパラメータを検索することもできます。以下の例では、単語「hell」と「rocks」のうちの一つを含むレコードを検索します。mysql。 SELECT id。 FROM review WHERE MATCH (ダタ) AGAINST ('hell ロック IN BOOLEAN MODE;+--++| id。 | +----+ |  1 | |  3 | +----+ 2 ローソン in セット (0.00 sec)以上の例は、従来のSELECT...LIKE文に比べて全文検索を行うより効果的な方法を示しています。次はMySQLデータベース検索画面を作成する必要がある場合、この方法を試してみてください。