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
Mary-Kate OlsenOriginal
2024-12-07 07:27:11343Durchsuche

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

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

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!

Stellungnahme:
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