Maison >base de données >tutoriel mysql >Comment puis-je prioriser la pertinence des colonnes dans la recherche en texte intégral MySQL ?
Dans une recherche en texte intégral utilisant MATCH() AGAINST() de MySQL, classer les résultats par pertinence est simple. Cependant, que se passe-t-il si vous souhaitez donner la priorité à la pertinence d'une colonne spécifique, telle que head, tout en considérant la pertinence d'autres colonnes comme body ?
Considérez cette requête initiale :
SELECT * FROM pages WHERE MATCH(head, body) AGAINST('some words' IN BOOLEAN MODE)
Il effectue une recherche en texte intégral sur les colonnes de tête et de corps, renvoyant les lignes correspondantes.
Pour trier par pertinence, nous pouvons ajouter un calcul column :
SELECT *, MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE) AS relevance FROM pages WHERE MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE) ORDER BY relevance
Cela introduit une colonne de pertinence qui indique la pertinence globale de chaque ligne. Cependant, il traite les colonnes d'en-tête et de corps de la même manière.
Pour donner la priorité à la colonne d'en-tête, une approche consiste à lui ajouter une colonne de pertinence distincte :
SELECT *, MATCH (head, body) AGAINST ('some words') AS relevance, MATCH (head) AGAINST ('some words') AS title_relevance FROM pages WHERE MATCH (head, body) AGAINST ('some words') ORDER BY title_relevance DESC, relevance DESC
Cela crée une colonne title_relevance cela représente la pertinence de la seule colonne de tête. En triant d'abord par title_relevance puis par pertinence, nous priorisons les lignes dont le contenu de l'en-tête est très pertinent.
En bonus, nous pourrions modifier la clause ORDER BY pour prendre en compte le nombre d'occurrences des mots spécifiés dans l'en-tête. column :
ORDER BY title_relevance + (total_head_words * weight_per_word) DESC
Ici, total_head_words représente le nombre de fois où les mots apparaissent dans la colonne d'en-tête etweight_per_word est un multiplicateur qui ajuste leur importance.
Alternativement, si vous avez la possibilité d'utiliser PostgreSQL, il offre des capacités de classement et de pondération plus avancées pour la recherche en texte intégral.
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!