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

Comment puis-je prioriser la pertinence dans la recherche de texte intégral MySQL sur plusieurs colonnes ?

DDD
Libérer: 2024-12-01 03:59:13
original
915 Les gens l'ont consulté

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

Recherche en texte intégral MySQL : optimisation de la pertinence et de la priorisation des colonnes

Lorsque vous effectuez des recherches en texte intégral sur plusieurs colonnes de tableau, il est souvent souhaitable de trier les résultats par pertinence. La fonction MATCH() AGAINST() de MySQL fournit un moyen efficace d'y parvenir.

Cependant, il arrive parfois qu'il soit crucial de donner la priorité à la pertinence dans des colonnes spécifiques. Supposons, par exemple, que nous ayons un tableau contenant des pages avec des colonnes d'en-tête et de corps, dans lesquelles nous souhaitons accorder une priorité plus élevée aux correspondances trouvées dans la colonne d'en-tête.

Solution : intégrer la pertinence spécifique aux colonnes

Pour répondre à cette exigence, nous pouvons exploiter une clause MATCH() supplémentaire pour calculer la pertinence séparément pour la colonne d'en-tête. En combinant cela avec la pertinence globale, nous pouvons hiérarchiser les résultats qui correspondent à la fois aux critères de recherche globaux et à la colonne spécifiée.

SELECT pages.*,
       MATCH(head, body) AGAINST('some words') AS relevance,
       MATCH(head) AGAINST('some words') AS head_relevance
FROM pages
WHERE MATCH(head, body) AGAINST('some words')
ORDER BY head_relevance DESC, relevance DESC
Copier après la connexion

Dans cette requête, nous calculons à la fois la pertinence globale (pertinence) et la colonne de tête. pertinence spécifique (head_relevance). En classant les résultats d'abord par head_relevance dans l'ordre décroissant (DESC), puis par pertinence également dans l'ordre décroissant, nous hiérarchisons efficacement les correspondances trouvées dans la colonne d'en-tête.

Bonus : comptage des occurrences des termes de recherche

Bien que l'approche ci-dessus améliore la hiérarchisation des colonnes, elle ne fournit pas de décompte des occurrences des termes de recherche dans la plage spécifiée. colonnes. Pour y parvenir, nous pouvons utiliser les fonctions FULLTEXT() et LENGTH() :

...
SELECT pages.*,
       MATCH(head, body) AGAINST('some words') AS relevance,
       MATCH(head) AGAINST('some words') AS head_relevance,
       LENGTH(head) - LENGTH(REPLACE(head, 'some words', '')) AS head_count,
       LENGTH(body) - LENGTH(REPLACE(body, 'some words', '')) AS body_count
FROM pages
...
Copier après la connexion

Cela étend la requête précédente pour calculer le nombre d'occurrences de termes de recherche dans la tête (head_count) et le corps (body_count) colonnes.

Options supplémentaires : Postgres et pondération

Si cela convient à votre projet, Postgres propose des fonctionnalités avancées qui permettent un contrôle plus fin du classement par pertinence. Ses capacités de recherche prennent en charge la pondération de termes ou d'opérateurs spécifiques, permettant une plus grande personnalisation des résultats de recherche.

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