Maison >base de données >tutoriel mysql >Comment puis-je prioriser la pertinence des colonnes dans la recherche en texte intégral MySQL ?

Comment puis-je prioriser la pertinence des colonnes dans la recherche en texte intégral MySQL ?

DDD
DDDoriginal
2024-11-30 19:25:13322parcourir

How Can I Prioritize Column Relevance in MySQL Full-Text Search?

Priorité de la pertinence des colonnes dans la recherche en texte intégral MySQL avec match() et against()

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn