プロジェクトで全文検索機能を使用する必要がある場合があります。全文検索の数が比較的少なく、次のような別の専用のインデックス作成ツールを構築したくない場合は、 elasticsearch の場合は、mysql.Function に付属する全文検索の使用を検討できます。
Mysql 5.7.25には全文検索機能が付いており、とても便利です。
MySQL 5.7.6 より前では、フルテキスト インデックスは英語のフルテキスト インデックスのみをサポートしており、中国語のフルテキスト インデックスはサポートしていませんでした。単語セグメンタを使用して中国語の段落を前処理し、それらを分割する必要がありました。単語を抽出し、データベースに保存します。
MySQL 5.7.6 以降、MySQL には、中国語、日本語、および韓国語の単語の分割をサポートする組み込みの ngram フルテキスト パーサーが組み込まれています。
この記事で使用されている MySQL バージョンは 5.7.25、InnoDB データベース エンジンです。
CREATE TABLE `tbl_article_content` ( `id` bigint(40) NOT NULL AUTO_INCREMENT, `article_title` varchar(60) COMMENT '标题', `article_summary` varchar(120) COMMENT '摘要', `article_content` text NOT NULL COMMENT '内容', `article_id` bigint(40) NOT NULL COMMENT '对应文章ID', `create_date` datetime NOT NULL COMMENT '创建时间', `modified_date` datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE, KEY `artid` (`article_id`) USING BTREE, FULLTEXT KEY `article_content` (`article_content`) /*!50100 WITH PARSER `ngram` */ ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
/*!50100 */ バージョン 5.01.00 以降を意味し、実行のみを実行します。
WITH PARSER `ngram` は指定された単語分割エンジンです。
テーブルの作成時にフルテキスト インデックスが追加されていない場合は、テーブルの作成後に追加できます。
create fulltext index article_content on tbl_article_content(article_content) WITH PARSER ngram;
INSERT INTO `tbl_article_content` VALUES ('2', '文章标题', '文章摘要', '文章内容', '2', '2022-02-05 13:47:55', '2022-02-05 13:47:59');
mysql> select * FROM tbl_article_content222 WHERE MATCH(article_content) AGAINST('内容'); +----+---------------+-----------------+-----------------+------------+---------------------+---------------------+ | id | article_title | article_summary | article_content | article_id | create_date | modified_date | +----+---------------+-----------------+-----------------+------------+---------------------+---------------------+ | 2 | 文章标题 | 文章摘要 | 文章内容 | 2 | 2022-02-05 13:47:55 | 2022-02-05 13:47:59 | +----+---------------+-----------------+-----------------+------------+---------------------+---------------------+ 1 row in set
全文クエリのキーワードはMATCHとAGAINSTです。
MATCH (col1,col2,...) AGAINST (expr [search_modifier]) search_modifier: { IN BOOLEAN MODE | WITH QUERY EXPANSION }
例: SELECT * FROM tab_name WHERE MATCH ('列名 1, 列名 2...列名 n') AGAINST ('Word 1 Word 2 Word 3 ... word m');
つまり、MATCH は一致する列に相当し、AGAINST は検索されるコンテンツに相当します。
以上がmysql5.7.25の全文検索機能の使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。