全文検索関数

全文検索は MATCH() … AGAINST シンタックスを用いて行われます。MATCH() は、検索用にカラムに名称をつける、
カンマで区切られたリストを使用します。AGAINST は検索するストリングと、実行する検索のタイプを示すオプション
の修飾子を利用します。検索ストリングは、変数やカラム名ではなく、リテラル ストリングでなければなりません。
全文検索には3種類あります :

* ブール検索は、特別なクエリ言語のルールを使用した検索ストリングを解釈します。
ストリングは検索の対象になる言葉を含みます。また、単語は整合行で提示または不提示にされなければならない、
もしくは、通常より高く、または低く加重するべき、等の条件を指定する演算子も含むことができます。
「some」 や 「then」 のような一般的な単語はストップワードで、検索ストリングにあってもマッチしません。
IN BOOLEAN MODE 修飾子はブール検索を特定します。

* 自然言語の検索は、検索ストリングを人間の自然な言語でのフレーズ ( フリーテキストのフレーズ ) として解釈します。
これには特別な演算子はありません。ストップワード リストは適用されます。また、行の 50% 以上にある言葉は常用語と判断され、
検出はされません。全文検索は、IN NATURAL LANGUAGE MODE 修飾子が与えられている、または修飾子がまったくない場合は、
自然言語検索になります。

* クエリ拡張検索は、自然言語検索が改変されたものです。自然言語検索を行うには、
検索ストリングが使用されます。そして、検索によって返された最も関連性の強い行からの言葉が検索ストリングに加えられ、
再度検索されます。クエリは 2 度目の検索からの行を戻します。
IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION または WITH QUERY EXPANSION 修飾子は、クエリ拡張検索を特定します。

IN NATURAL LANGUAGE MODE および IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION 修飾子は、MySQL 5.1.7 から追加されました。

CREATE TABLE `TABLE100` (
  id int UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
  title   varchar(100) NOT NULL,
  body    varchar(45) NOT NULL,
  FULLTEXT (title,body)
) ENGINE=MYISAM DEFAULT CHARSET=utf8;

INSERT INTO TABLE100 (title,body) VALUES
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'),
('Optimizing MySQL','In this tutorial we will show ...'),
('MySQL Tricks','1. Never run mysqld as root. 2. ...'),
('MySQL vs. MSSQL','In the following database comparison ...'),
('DBMS and MYSQL','MYSQL is Open Source database ...'),
('MySQL Security','When configured properly, MySQL ...');

fulltext

SELECT * FROM TABLE100
WHERE MATCH (title,body)
AGAINST ('DBMS' IN NATURAL LANGUAGE MODE);

SELECT LEFT(title,20),LEFT(body,20) FROM TABLE100
WHERE MATCH (title,body) AGAINST ('DBMS');

fulltext_2

Comments are closed.

Post Navigation