Das ist keine einfache Frage. Am besten verwenden Sie eine Art Volltextsuche . Die Volltextsuche kann so konfiguriert werden, dass sie Stoppwörter enthält (Wörter, die bei der Suche ausgelassen werden – wie das Wort the
) und kann auch eine Mindestwortlänge haben (Wörter mit weniger als einer bestimmten Zeichenlänge werden ebenfalls von der Suche ausgeschlossen.
Wenn Sie jedoch einfach
verwendenSELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('ISBN number on site');
Dann gibt MySQL nicht nur den Datensatz mit dem gesuchten Wert zurück, sondern die Datensätze, die nur einige der Wörter enthalten, und zwar in unterschiedlicher Reihenfolge. Der, den Sie gezeigt haben, wird wahrscheinlich einer der am höchsten eingestuften sein, aber es gibt keine Garantie dafür, dass es der am höchsten eingestufte ist.
Sie können die boolesche Volltextsuche
verwenden und stellen Sie +
voran zu jedem Suchwort, um MySQL zu zwingen, nur die Datensätze zurückzugeben, die alle Suchwörter enthalten:
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +on +site' IN BOOLEAN MODE);
Aber on
sollte entweder ein Stoppwort sein (es befindet sich in den Standard-Stichwortlisten) oder kürzer sein als die Mindestwortlänge, also sollte es aus dem Suchausdruck weggelassen werden (Sie erhalten keine Ergebnisse zurück):
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +site' IN BOOLEAN MODE);
Ich weiß, dass dies eine Änderung des Suchausdrucks erfordert, aber dies wird Ihnen die besten Ergebnisse liefern, wenn Sie die eingebaute Funktionalität von MySQL verwenden.
Die Alternative ist die Verwendung anderer Volltextsuchmaschinen, wie z. B. sphinx um die Suche für Sie durchzuführen.