Niestety nie możesz tego zrobić za pomocą indeksu pełnotekstowego MySQL. Nie możesz pobrać '*nited states'
natychmiast z indeksu, ponieważ lewe znaki są najważniejszą częścią indeksu. Jednak możesz wyszukaj 'United Sta*'
.
// the only possible wildcard full-text search in MySQL
WHERE MATCH(column) AGAINST ('United Sta*' IN BOOLEAN MODE)
Pełny tekst MySQL sprawdza się najlepiej przy wyszukiwaniu całych słów w zdaniach — nawet to czasami może być do niczego. W przeciwnym razie sugerowałbym użycie zewnętrznego silnika pełnotekstowego, takiego jak Solr lub Sfinks . Myślę, że Sphinx pozwala na stosowanie symboli wieloznacznych prefiksów i sufiksów, nie jestem pewien co do innych.
Możesz wrócić do LIKE
MySQL klauzula, ale znowu uruchamianie zapytań takich jak LIKE '%nited states'
lub LIKE '%nited Stat%'
, ucierpi również na wydajności, ponieważ nie może użyć indeksu na pierwszych kilku znakach. 'United Sta%'
i 'Unit%States'
są w porządku, ponieważ indeks może być użyty przeciwko pierwszej grupie znanych znaków.
Innym dość poważnym zastrzeżeniem dotyczącym indeksowania pełnotekstowego w MySQL jest lista słów przerywających i ustawienia minimalnej długości słowa . Na przykład w środowisku hostingu współdzielonego będziesz ograniczony do słów większych lub równych 4 znakom. Zatem wyszukiwanie „Goo” w celu uzyskania „Google” zakończy się niepowodzeniem. Lista zatrzymanych słów nie zezwala również na popularne słowa, takie jak „i”, „może” i „na zewnątrz” - w rzeczywistości jest 548 słów przerywanych razem! Ponownie, jeśli nie korzystasz z hostingu współdzielonego, ustawienia te można stosunkowo łatwo modyfikować, ale jeśli tak, zirytują Cię niektóre ustawienia domyślne.