Heim >Datenbank >MySQL-Tutorial >Wie kann ich die Spaltenrelevanz in der MySQL-Volltextsuche priorisieren?

Wie kann ich die Spaltenrelevanz in der MySQL-Volltextsuche priorisieren?

DDD
DDDOriginal
2024-11-30 19:25:13314Durchsuche

How Can I Prioritize Column Relevance in MySQL Full-Text Search?

Priorisierung der Spaltenrelevanz in der MySQL-Volltextsuche mit match() und against()

Bei einer Volltextsuche mit MySQLs MATCH() AGAINST() Die Sortierung der Ergebnisse nach Relevanz ist unkompliziert. Was aber, wenn Sie die Relevanz einer bestimmten Spalte (z. B. Kopf) priorisieren und gleichzeitig die Relevanz anderer Spalten (z. B. Körper) berücksichtigen möchten?

Betrachten Sie diese erste Abfrage:

SELECT * FROM pages WHERE MATCH(head, body) AGAINST('some words' IN BOOLEAN MODE)

Es führt eine Volltextsuche in den Kopf- und Textspalten durch und gibt übereinstimmende Zeilen zurück.

Um nach Relevanz zu ordnen, können wir eine berechnete hinzufügen Spalte:

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

Hiermit wird eine Relevanzspalte eingeführt, die die Gesamtrelevanz jeder Zeile angibt. Es behandelt jedoch sowohl die Kopf- als auch die Körperspalte gleich.

Um die Kopfspalte zu priorisieren, besteht ein Ansatz darin, eine separate Relevanzspalte dafür hinzuzufügen:

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

Dadurch wird eine Spalte „title_relevance“ erstellt das repräsentiert allein die Relevanz der Kopfspalte. Indem wir zuerst nach Titelrelevanz und dann nach Relevanz sortieren, priorisieren wir Zeilen mit hochrelevantem Kopfinhalt.

Als Bonus könnten wir die ORDER BY-Klausel ändern, um die Anzahl des Vorkommens der angegebenen Wörter im Kopf zu berücksichtigen Spalte:

ORDER BY title_relevance + (total_head_words * weight_per_word) DESC

Hier stellt „total_head_words“ die Häufigkeit dar, mit der die Wörter in der Kopfspalte erscheinen, und „weight_per_word“ ist ein Multiplikator dafür passt ihre Wichtigkeit an.

Alternativ bietet es, wenn Sie die Flexibilität haben, PostgreSQL zu verwenden, erweiterte Ranking- und Gewichtungsfunktionen für die Volltextsuche.

Das obige ist der detaillierte Inhalt vonWie kann ich die Spaltenrelevanz in der MySQL-Volltextsuche 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