sql >> Databáze >  >> RDS >> Mysql

MySQL Full Text Search Mystery

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.



  1. Vytvořte vlastní způsob dopravy v OpenCart:Část druhá

  2. Připojení Delphi na Linuxu k SQL Serveru

  3. Proč heslo password_verify vrací hodnotu false?

  4. Minimální GRANTy potřebné pro mysqldump pro dumping úplného schématu? (Spouštěče chybí!!)