Z Dokumenty MySQL
-
+
Úvodní znaménko plus znamená, že toto slovo musí být přítomno v každém vráceném řádku. -
*
Hvězdička slouží jako operátor zkrácení (nebo zástupný znak). Na rozdíl od ostatních operátorů by měla být připojena ke slovu, které má být ovlivněno. Slova se shodují, pokud začínají slovem předcházejícím operátoru *.Pokud je slovo zadáno pomocí operátoru zkrácení, není odstraněno z booleovského dotazu, i když je příliš krátké (jak je určeno z nastavení ft_min_word_len) nebo ignorované slovo. Dochází k tomu proto, že slovo není považováno za příliš krátké nebo nepoužité, ale jako předpona, která musí být v dokumentu přítomna ve formě slova začínajícího předponou .
V kontextu:
Zápas(...) PROTI(...)
MATCH (name) AGAINST ('+ski*' IN BOOLEAN MODE)
znamená, že hledáte řádky, kde je slovo v name
sloupec musí obsahovat ski
a musí začít se slovem ski
.
Ze sady, kterou jste zveřejnili, Dartmouth Skiway
je jediné name
který splňuje tyto požadavky:obsahuje slovo ski
a před ním je slovo ski
.
Druhý name
i když odpovídají prvnímu pravidlu:musí obsahovat ski
, nemají předponu ski
, jak je stanoveno ve vašem pravidle. Řádek vrácený vaším booleovským vyhledáváním je jediný s name
sloupec, který obsahuje slovo, které obsahuje oba ski
a je slovo předponou od ski
.
Jak navrhuje ajreal, zkuste snížit ft_min_len_word_setting
v my.cnf
. Vaše vyhledávání nemusí kvůli výchozímu nastavení přinést očekávané výsledky. Zkuste to snížit na 3.
WHERE sloupec LIKE %text%
WHERE name LIKE "%ski%"
hledá řádky s name
sloupce, které obsahují ski
, bez ohledu na to, kde se slovo vyskytuje.