За съжаление не можете да направите това с помощта на индекс на пълен текст на MySQL. Не можете да извлечете '*nited states'
незабавно от индекса, защото левите знаци са най-важната част от индекса. Все пак виможетете търсене 'United Sta*'
.
// the only possible wildcard full-text search in MySQL
WHERE MATCH(column) AGAINST ('United Sta*' IN BOOLEAN MODE)
Пълният текст на MySQL се представя най-добре при търсене на цели думи в изречения - дори това може да е гадно на моменти. В противен случай бих предложил да използвате външна машина за пълен текст като Solr или Sphinx . Мисля, че Sphinx позволява заместващи знаци за префикси и суфикси, не съм сигурен за другите.
Можете да се върнете към LIKE
на MySQL клауза, но отново изпълнение на заявки като LIKE '%nited states'
или LIKE '%nited Stat%'
, също ще пострада от производителността, тъй като не може да използва индекса на първите няколко знака. 'United Sta%'
и 'Unit%States'
са добре, тъй като индексът може да се използва срещу първата група познати знаци.
Друго доста голямо предупреждение при използване на пълнотекстово индексиране на MySQL е списъкът със стоп думи и Настройки за минимална дължина на думата . Например, в среда за споделен хостинг ще бъдете ограничени до думи, по-големи или равни на 4 знака. Така че търсенето на „Goo“, за да получите „Google“, ще се провали. Списъкът със стоп думи също така забранява често срещаните думи като 'и', 'може би' и 'отвън' - всъщност има 548 стоп-думи заедно! Отново, ако не използвате споделен хостинг, тези настройки са сравнително лесни за промяна, но ако сте, тогава ще се дразните с някои от настройките по подразбиране.