Bohužel to nemůžete udělat pomocí fulltextového indexu MySQL. Nemůžete načíst '*nited states'
okamžitě z rejstříku, protože levé znaky jsou nejdůležitější částí rejstříku. Nicméně můžete hledejte 'United Sta*'
.
// the only possible wildcard full-text search in MySQL
WHERE MATCH(column) AGAINST ('United Sta*' IN BOOLEAN MODE)
Plný text MySQL funguje nejlépe při hledání celých slov ve větách – i to může být někdy na hovno. V opačném případě bych navrhoval použít externí fulltextový engine, jako je Solr nebo Sphinx . Myslím, že Sphinx umožňuje zástupné znaky předpony a přípony, u ostatních si nejsem jistý.
Můžete se vrátit k MySQL LIKE
klauzule, ale opět spouštění dotazů jako LIKE '%nited states'
nebo LIKE '%nited Stat%'
, bude také trpět na výkonu, protože nemůže použít index na prvních několika znacích. 'United Sta%'
a 'Unit%States'
jsou v pořádku, protože index lze použít proti první skupině známých znaků.
Další docela zásadní námitka při použití fulltextového indexování MySQL je seznam stop-slov a nastavení minimální délky slova . Například v prostředí sdíleného hostingu budete omezeni na slova větší nebo rovna 4 znakům. Takže hledání „Goo“ pro získání „Google“ by selhalo. Seznam ignorovaných slov také nepovoluje běžná slova jako „a“, „možná“ a „mimo“ – ve skutečnosti je dohromady 548 zastavovacích slov! Opět platí, že pokud nepoužíváte sdílený hosting, lze tato nastavení poměrně snadno upravit, ale pokud ano, budete se s některými výchozími nastaveními zlobit.