Ich habe einige articles und issues gelesen, konnte aber keine befriedigende Lösung finden. Ich möchte verwandte Datensätze aus der Datenbank auswählen, wenn ein Benutzer ein Formular ausfüllt. Auf dieselbe Weise funktioniert die Funktionalität auf dieser Site, wenn Sie eine Frage stellen.MySQL Volltextsuche mit Wortgrenzen
Betrachten Sie mit den folgenden drei Datensätze in der Spalte einer Datenbanktabelle subject
+---+---------------------------------------------------+
| 1 | Pagina aanmaken en beter doorzoekbaar maken |
+---+---------------------------------------------------+
| 2 | Sorteerfunctie uitbreiden in zoek-en-boek functie |
+---+---------------------------------------------------+
| 3 | Zoek de verschillen tussen de pagina's |
+---+---------------------------------------------------+
ich meine Suchabfrage mit dem Wort beginnen zoek
so möchte ich auf den Begriff zoek
die relevantesten Ergebnisse aus der Datenbank abzufragen. Ich kam mit der folgenden Abfrage auf:
SELECT
id,
subject,
MATCH(
subject
)
AGAINST(
'zoek*'
IN BOOLEAN MODE
)
AS
score
FROM
Issues
WHERE
MATCH(
subject
)
AGAINST(
'zoek*'
IN BOOLEAN MODE
)
Wenn ich diese Abfrage ausführen ich alle Datensätze erwartet würde zu zeigen, und (wahrscheinlich, ich weiß nicht, wie die Spezifität in MySQL funktioniert) ID 3 oben angezeigt (weil genaues Wort übereinstimmt).
Stattdessen waren die Ergebnisse der Abfrage nur Zeile 2
und 3
mit genau der gleichen Punktzahl (0.031008131802082062).
Was muss ich in meiner Abfrage ändern, um passenden Datensätzen zu entsprechen? Auch unter Berücksichtigung, dass Benutzer Schlüsselwörter oder Sätze eingeben können.
Warum erwartet Sie alle Datensätze in Folge zu sehen? Der erste Eintrag enthält kein Wort 'zoek' –
@ r-costas Antwort ist korrekt. Vielleicht möchten Sie auch auf http://dev.mysql.com/doc/refman/5.7/en/fulltext-boolean.html nachsehen, wie Relevanz-Ranking berechnet wird. MySQL macht, was es hier machen soll. Wenn Sie eine umfangreichere Textsuche benötigen, müssen Sie wahrscheinlich etwas Lucene-basiertes (Solr, Elasticsearch, usw.) verwenden. – evanv