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

Comment puis-je prioriser la pertinence des recherches en texte intégral MySQL sur plusieurs colonnes ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-07 07:27:11343parcourir

How Can I Prioritize Relevance in MySQL Full-Text Searches Across Multiple Columns?

Priorité à la pertinence dans la recherche en texte intégral MySQL avec plusieurs colonnes

Dans MySQL, la fonction MATCH() AGAINST() facilite les recherches en texte intégral sur plusieurs colonnes. Par défaut, la pertinence de la recherche est déterminée par l'occurrence combinée des termes correspondants dans toutes les colonnes spécifiées. Cependant, vous pouvez rencontrer des scénarios dans lesquels vous devez prioriser la pertinence en fonction de colonnes spécifiques.

Pertinence par colonne

Pour y parvenir, vous pouvez introduire plusieurs colonnes de pertinence, une pour chaque colonne, comme vous l'avez mentionné. Bien que cette approche garantisse une hiérarchisation précise, elle implique également des recherches redondantes, affectant les performances.

Optimiser la hiérarchisation de la pertinence

Une méthode alternative qui équilibre la hiérarchisation des performances et de la pertinence consiste à ajuster la priorisation formule de calcul de pertinence. Voici une requête modifiée qui intègre un coefficient de pondération pour la colonne de tête :

SELECT * ,
       MATCH (head, body) AGAINST ('some words') AS relevance,
       MATCH (head) AGAINST ('some words') AS title_weight
FROM pages
WHERE MATCH (head, body) AGAINST ('some words')
ORDER BY (title_weight + relevance) DESC

Cette requête attribue un poids plus élevé au score de pertinence de la colonne de tête. En ajustant le poids en conséquence, vous pouvez prioriser la pertinence en fonction de colonnes spécifiques.

Bonus : compter les occurrences de mots

Pour compter l'occurrence des termes correspondants dans chaque colonne, vous peut utiliser l'indicateur BOOLEAN MODE dans MATCH() :

SELECT * ,
       MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE) AS relevance,
       MATCH (head) AGAINST ('some words' IN BOOLEAN MODE) AS title_count
FROM pages
WHERE MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE)
ORDER BY title_count DESC, relevance DESC

La colonne title_count indique combien de fois les termes spécifiés erscheinen dans la colonne de tête. Ces informations vous aident à affiner davantage vos résultats de recherche.

Remarque : Cette approche convient aux versions MySQL 8.0 et supérieures. Pour les anciennes versions, vous devrez peut-être explorer des méthodes alternatives pour hiérarchiser la pertinence et compter les occurrences de termes.

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