Parfois, la fonction de recherche en texte intégral doit être utilisée dans le projet. Si le nombre de recherches en texte intégral est relativement faible et que vous ne souhaitez pas créer un outil d'indexation dédié distinct comme elasticsearch, vous pouvez envisager d'utiliser. la fonction de recherche en texte intégral fournie avec MySQL.
mysql 5.7.25 est livré avec une fonction de recherche en texte intégral, ce qui est très pratique.
Avant MySQL 5.7.6, l'index de texte intégral ne prenait en charge que l'index de texte intégral en anglais et ne prenait pas en charge l'index de texte intégral en chinois. Il était nécessaire d'utiliser un segmenteur de mots pour prétraiter les paragraphes chinois et les diviser en mots, puis. stockez-les dans la base de données.
À partir de MySQL 5.7.6, MySQL dispose d'un analyseur de texte intégral ngram intégré pour prendre en charge la segmentation des mots chinois, japonais et coréen.
La version MySQL utilisée dans cet article est la 5.7.25, moteur de base de données 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 */ Cela signifie la version 5.01.00 ou supérieure, exécutée uniquement
AVEC PARSER `ngram` est le moteur de segmentation de mots désigné.
Si l'index de texte intégral n'est pas ajouté lors de la création du tableau, vous pouvez l'ajouter après la création du tableau.
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
Les mots-clés de la requête en texte intégral sont MATCH et CONTRE.
MATCH (col1,col2,...) AGAINST (expr [search_modifier]) search_modifier: { IN BOOLEAN MODE | WITH QUERY EXPANSION }
Par exemple : SELECT * FROM tab_name WHERE MATCH ('Nom de la colonne 1, Nom de la colonne 2...Nom de la colonne n') CONTRE ('Mot 1 Mot 2 Mot 3... Mot m')
Autrement dit : MATCH est équivalent à la colonne à faire correspondre, et CONTRE est le contenu à trouver.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!