Maison > Article > base de données > Un bref tutoriel sur l'application d'indexation de texte intégral MySQL
Cet article présente les connaissances de base de l'index de texte intégral MySQL sous les aspects suivants :
Plusieurs considérations pour l'index de texte intégral MySQL
Syntaxe de l'index de texte intégral
Introduction à plusieurs types de recherche
Exemples de plusieurs types de recherche
Plusieurs notes sur l'index full-text
La recherche doit se porter sur une colonne d'index de type fulltext, et la colonne spécifiée dans match doit être en texte intégral Spécifié
ne peut être appliqué qu'aux tables dont le moteur de table est de type MyIsam (MySQL 5.6 et versions ultérieures peuvent également être utilisées dans le moteur de table Innodb)
Les index de texte intégral ne peuvent être créés que sur des colonnes de type char, varchar et text
Comme les index ordinaires, ils peuvent être spécifiés lors de la définition de la table, ou ajoutés ou modifié après la création de la table
Pour une insertion d'enregistrement à grande échelle, le processus d'insertion de données dans une table sans index puis de création d'un index est beaucoup plus rapide que l'insertion dans une table table avec un index
La chaîne de recherche doit être une chaîne constante et ne peut pas être le nom de colonne de la table
Lorsque la sélectivité du l'enregistrement de recherche dépasse 50%, on considère qu'il n'y a pas de correspondance (Limité uniquement en recherche naturelle)
Syntaxe de recherche d'index de texte intégral
MATCH (nom de colonne 1, nom de colonne 2,…) CONTRE (chaîne de recherche [modificateur de recherche])
Les noms de colonnes 1, 2, etc. spécifiés dans match sont les noms de colonnes spécifiés lors de l'établissement de l'index de texte intégral. sont décrits comme suit :
search_modifier: { IN NATURAL LANGUAGE MODE | IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION | IN BOOLEAN MODE | WITH QUERY EXPANSION }
Combien d'introduction aux trois types de recherche
Les modificateurs de recherche ci-dessus illustrent en fait 3 types de recherche en texte intégral
EN MODE LANGAGE NATUREL
Introduction : Formulaire de recherche par défaut (sans aucun modificateur de recherche ou le modificateur est EN MODE LANGAGE NATUREL)
Caractéristiques :
Les caractères de la chaîne de recherche sont analysés en caractères normaux et n'ont aucune signification particulière
Filtrer les chaînes dans la liste des caractères masqués
Lorsque la sélectivité de l'enregistrement dépasse 50%, cela est généralement considéré comme une inadéquation
Les enregistrements renvoyés sont triés et affichés selon la pertinence de l'enregistrement
EN MODE BOOLÉEN
Introduction : Recherche en mode booléen (Lorsque le modificateur de recherche est EN MODE BOOLÉEN)
Caractéristiques :
analysera la signification des caractères spéciaux dans le rechercher une chaîne selon certaines règles et exécuter certaines règles logiques de signification. Par exemple : un certain mot doit apparaître, ou ne peut pas apparaître, etc.
Les fiches renvoyées par ce type de recherche ne sont pas triées selon la pertinence
AVEC EXPANSION DE REQUÊTE
Introduction : Un formulaire de recherche légèrement complexe qui effectue en fait 2 recherches naturelles et peut renvoyer directement des enregistrements Introduction à l'enregistrement de relations sexuelles, modificateur EN MODE LANGAGE NATUREL AVEC EXPANSION DE REQUETE ou AVEC modificateur D'EXPANSION DE REQUÊTE
Caractéristiques : Ce type de recherche fournit en fait une fonction de recherche indirecte, telle que : Je recherche un mot, et la première ligne renvoyée ne le fait pas contenir l’une des chaînes du terme de recherche. Une seconde correspondance peut être effectuée sur la base des mots d'enregistrement du premier résultat de recherche, de sorte qu'il soit possible de trouver des enregistrements correspondants avec certaines relations indirectes.
Exemples de plusieurs types de recherche
Application en mode MODE LANGAGE NATUREL :
est toujours appliqué à la table des produits, où nous avons établi un index de texte intégral dans le nom champ Parce que je dois faire correspondre les enregistrements pertinents dans la colonne de nom en fonction de mots-clés
L'instruction SQL est la suivante :
SELECT * FROM product WHERE match(name) against(‘auto’)
Le temps n'est pas mauvais, plus de 10 000 enregistrements ont été atteints. sur près de 870 000, ce qui prend 1,15 seconde, l'effet est toujours bon
Remarque : par défaut, les enregistrements sont renvoyés de haut en bas en fonction de la pertinence
Nous pouvons SELECT match( name) against('auto') FROM product Vérifiez la valeur de corrélation de l'enregistrement Les valeurs sont comprises entre 0 et 1. 0 signifie que l'enregistrement ne correspond pas
Plusieurs caractéristiques importantes :
1. Quels mots seront ignorés
Le terme de recherche est trop court L'index de texte intégral par défaut considère les mots de plus de 4 caractères comme des mots valides. Nous pouvons modifier ft_min_word_len dans la configuration pour configurer
.L'index de texte intégral par défaut bloque les mots dans la liste de vocabulaire. Les mots sont bloqués car ces mots sont trop courants et n'ont aucun effet sémantique, ils sont donc ignorés dans le processus de recherche. Bien entendu, cette liste est également configurable.
2. Comment effectuer une segmentation de mots
L'index de texte intégral considère un caractère valide continu (le jeu de caractères correspondant à w dans l'expression régulière) comme un mot, qui peut également contenir un "'", mais continu Deux '' sont considérés comme un séparateur. Autres délimiteurs tels que : espaces, virgules, points, etc.
Application EN MODE BOOLÉEN :
Dans le mode de correspondance booléenne, nous pouvons ajouter des symboles spéciaux pour ajouter des fonctions logiques au processus de recherche. Tels que les exemples fournis sur le site officiel (recherche d'instructions contenant une chaîne mysql et ne contenant pas Yousql) :
SELECT * FROM articles WHERE MATCH (title,body) -> AGAINST (‘+MySQL -YourSQL’ IN BOOLEAN MODE);
可见,我们对搜索的控制又多了一些,看起来“高大上”了些。
实际上,上面的操作隐含了几个意思:
加号:相当于and
减号:相当于not
没有:相当于or
下面看下布尔类型搜索的几个重要特性:
1. 没有50%记录选择性的限制,即使搜索结果记录超过总数的50%也同样返回结果
2. 不会自动的按记录的相关性进行降序排序
3. 可以直接应用在没有创建fulltext的全文索引上,但是这样会查询的非常慢,所以说还是别用了。
4. 支持最小、最大单词长度
5. 应用屏蔽词列表
布尔搜索支持的操作符:
n 加号 +:指示修饰的单词必须出现在记录中
n 减号 -:指示修饰的单词必须不能出现在记录中
n 没有任何操作符:单词可有可无,但是包含该词的记录相关性高
n 双引号 “ : 将一个词组作为一个匹配。如:”one word” 匹配one word在一起的单词
下面是官方的一些实例:
至少包含一个词的记录 ‘apple banana’ 必须包含着两个词 ‘+apple +juice’ 必须包含apple,包含macintosh的记录相关性高,也可以不包含 ‘+apple macintosh’ 必须包含apple且不能喊有macintosh ‘+apple -macintosh’ 查找apple开头单词的记录 ‘apple*’ 完整匹配some words单词 ‘”some words”‘
了解了基本的mysql全文索引知识,觉得它的全文索引比like当然是强了很多。但是面对高级的搜索还是略显简陋,且性能问题也是担忧。
以上就是MySQL 全文索引应用简明教程的内容,更多相关内容请关注PHP中文网(www.php.cn)!