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
Libérer: 2024-11-30 19:25:13
original
384 Les gens l'ont consulté

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)
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal