Von MySQL-Dokumentation
-
+
Ein führendes Pluszeichen gibt an, dass dieses Wort in jeder zurückgegebenen Zeile vorhanden sein muss. -
*
Das Sternchen dient als Trunkierungs- (oder Wildcard-)Operator. Im Gegensatz zu den anderen Operatoren sollte es an das zu beeinflussende Wort angehängt werden. Wörter stimmen überein, wenn sie mit dem Wort beginnen, das dem *-Operator vorausgeht.Wenn ein Wort mit dem Trunkierungsoperator angegeben wird, wird es nicht aus einer booleschen Abfrage entfernt, selbst wenn es zu kurz ist (wie von der Einstellung ft_min_word_len bestimmt) oder ein Stoppwort ist. Dies liegt daran, dass das Wort nicht als zu kurz oder als Stoppwort angesehen wird, sondern als Präfix, das im Dokument in Form eines Wortes vorhanden sein muss, das mit dem Präfix beginnt .
Im Kontext:
MATCH(...) GEGEN(...)
MATCH (name) AGAINST ('+ski*' IN BOOLEAN MODE)
bedeutet, dass Sie nach Zeilen suchen, in denen ein Wort im name
enthalten ist Spalte muss enthalten ski
, und muss beginnen mit dem Wort ski
.
Aus dem Set, das Sie gepostet haben, Dartmouth Skiway
ist der einzige name
das diesen Anforderungen entspricht:es enthält das Wort ski
, und ihm wird das Wort ski
vorangestellt .
Der andere name
Spalten, obwohl sie der ersten Regel entsprechen:muss ski
enthalten , sie haben kein Präfix ski
, wie in Ihrer Regel festgelegt. Die von Ihrer booleschen Suche zurückgegebene Zeile ist die einzige mit einem name
Spalte, die ein Wort enthält, das beide enthält ski
und ist ein Wort vorangestellt mit ski
.
Versuchen Sie, wie von ajreal vorgeschlagen, die ft_min_len_word_setting
zu verringern in my.cnf
. Aufgrund der Standardeinstellung liefert Ihre Suche möglicherweise nicht die erwarteten Ergebnisse. Versuchen Sie es auf 3 zu reduzieren.
WHERE-Spalte LIKE %text%
WHERE name LIKE "%ski%"
sucht nach Zeilen mit name
Spalten, die ski
enthalten , egal wo das Wort vorkommt.