Heim > Datenbank > MySQL-Tutorial > Wie kann ich die Relevanz in der MySQL-Volltextsuche über mehrere Spalten hinweg priorisieren?

Wie kann ich die Relevanz in der MySQL-Volltextsuche über mehrere Spalten hinweg priorisieren?

DDD
Freigeben: 2024-12-01 03:59:13
Original
907 Leute haben es durchsucht

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

MySQL-Volltextsuche: Relevanz und Spaltenpriorisierung optimieren

Bei der Durchführung von Volltextsuchen über mehrere Tabellenspalten hinweg ist es oft wünschenswert, die Reihenfolge zu bestimmen Ergebnisse nach Relevanz. Die Funktion MATCH() AGAINST() von MySQL bietet eine effiziente Möglichkeit, dies zu erreichen.

Es gibt jedoch Situationen, in denen es entscheidend ist, die Relevanz innerhalb bestimmter Spalten zu priorisieren. Angenommen, wir haben eine Tabelle mit Seiten mit Kopf- und Körperspalten, in der wir den in der Kopfspalte gefundenen Übereinstimmungen eine höhere Priorität einräumen möchten.

Lösung: Einbeziehung der spaltenspezifischen Relevanz

Um dieser Anforderung gerecht zu werden, können wir eine zusätzliche MATCH()-Klausel nutzen, um die Relevanz separat für die Kopfspalte zu berechnen. Indem wir dies mit der Gesamtrelevanz kombinieren, können wir Ergebnisse priorisieren, die sowohl den Gesamtsuchkriterien als auch der angegebenen Spalte entsprechen.

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

In dieser Abfrage berechnen wir sowohl die Gesamtrelevanz (Relevanz) als auch die Kopfspalte. spezifische Relevanz (head_relevance). Indem wir die Ergebnisse zuerst nach Head_Relevance in absteigender Reihenfolge (DESC) und dann nach Relevanz, ebenfalls in absteigender Reihenfolge, ordnen, priorisieren wir effektiv Übereinstimmungen, die in der Head-Spalte gefunden werden.

Bonus: Zählen des Vorkommens von Suchbegriffen

Während der obige Ansatz die Spaltenpriorisierung verbessert, liefert er keine Zählung der Vorkommen von Suchbegriffen innerhalb der angegebenen Spalten. Um dies zu erreichen, können wir die Funktionen FULLTEXT() und LENGTH() verwenden:

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

Dies erweitert die vorherige Abfrage, um die Anzahl der Vorkommen von Suchbegriffen sowohl im Kopf (head_count) als auch im Körper (body_count) zu berechnen. Spalten.

Zusätzliche Optionen: Postgres und Gewichtung

Wenn für Ihr Projekt geeignet, Postgres bietet erweiterte Funktionen, die eine genauere Kontrolle über das Relevanzranking ermöglichen. Seine Suchfunktionen unterstützen die Gewichtung bestimmter Begriffe oder Operatoren und ermöglichen so eine bessere Anpassung der Suchergebnisse.

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

Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage