Heim > Datenbank > MySQL-Tutorial > Wie kann ich die Relevanz bei MySQL-Volltextsuchen über mehrere Spalten hinweg priorisieren?

Wie kann ich die Relevanz bei MySQL-Volltextsuchen über mehrere Spalten hinweg priorisieren?

Mary-Kate Olsen
Freigeben: 2024-12-07 07:27:11
Original
383 Leute haben es durchsucht

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

Priorisierung der Relevanz in der MySQL-Volltextsuche mit mehreren Spalten

In MySQL erleichtert die Funktion MATCH() AGAINST() die Volltextsuche über mehrere Spalten hinweg. Standardmäßig wird die Suchrelevanz durch das kombinierte Vorkommen übereinstimmender Begriffe in allen angegebenen Spalten bestimmt. Es kann jedoch vorkommen, dass Sie die Relevanz anhand bestimmter Spalten priorisieren müssen.

Relevanz nach Spalte

Um dies zu erreichen, können Sie mehrere Relevanzspalten einführen, eine für jede Spalte, wie Sie erwähnt haben. Während dieser Ansatz eine genaue Priorisierung gewährleistet, impliziert er auch redundante Suchvorgänge, die sich auf die Leistung auswirken.

Relevanzpriorisierung optimieren

Eine alternative Methode, die Leistung und Relevanzpriorisierung in Einklang bringt, besteht darin, die anzupassen Formel zur Berechnung der Relevanz. Hier ist eine modifizierte Abfrage, die einen Gewichtungskoeffizienten für die Kopfspalte enthält:

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
Nach dem Login kopieren

Diese Abfrage weist dem Relevanzwert der Kopfspalte eine höhere Gewichtung zu. Indem Sie die Gewichtung entsprechend anpassen, können Sie die Relevanz anhand bestimmter Spalten priorisieren.

Bonus: Vorkommen von Wörtern zählen

Um das Vorkommen übereinstimmender Begriffe in jeder Spalte zu zählen, können Sie kann das BOOLEAN MODE-Flag in MATCH() verwenden:

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
Nach dem Login kopieren

Die Spalte title_count gibt an, wie oft die angegebenen Begriffe vorkommen in der Kopfspalte. Diese Informationen helfen Ihnen, Ihre Suchergebnisse weiter zu verfeinern.

Hinweis: Dieser Ansatz ist für MySQL-Versionen 8.0 und höher geeignet. Bei älteren Versionen müssen Sie möglicherweise alternative Methoden zur Priorisierung der Relevanz und zum Zählen des Vorkommens von Begriffen erkunden.

Das obige ist der detaillierte Inhalt vonWie kann ich die Relevanz bei MySQL-Volltextsuchen über mehrere Spalten hinweg priorisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage