Я использую MySQL 5.6.24 с InnoDB и пытаюсь реализовать полнотекстовый поиск. У меня есть список названий ресторанов, и тестирование, казалось, работало хорошо, пока я не попробовал следующее.
SELECT * FROM table WHERE MATCH(name) AGAINST ('grill\'d' IN BOOLEAN MODE)
У меня есть ресторан под названием Grill’d в базе данных, написанный именно так (с апострофом). У меня также есть много ресторанов в таблице со словом Гриль в названии. Поиск возвращает и Grill’d, и все те, у кого Grill в заголовке. Это не было бы так плохо, если бы это придало Грилю более высокую актуальность, но это не так.
При дальнейшем расследовании может показаться, что \ ‘заменяется пробелом, так как поисковый «стейк-хаус» возвращает все имена, которые включают слово «стейк» или «дом», но НЕ «стейк-хаус».
Может кто-нибудь дать какой-нибудь совет по этому поводу, но, возможно, что более важно, как я получу только что Гриль вернулся в результате.
ОБНОВИТЬ
» p \ ‘tite * «‘ действительно находит P’tite (ОК)
» p \ ‘tit * «‘ НЕ находит P’tite (почему бы и нет?)
‘p \’ ti * ‘действительно находит P’tite, но также находит Тигра, Тима и т. д. (почему он должен найти только P’tite?)
«p \ ‘ti *» действительно находит P’tite, но также находит Тигра, Тима и т. д. (почему?)
«p’ti *» действительно находит P’tite, но также находит Тигра, Тима и т. д. (почему?)
Какой-нибудь совет по разделителям и групповым символам?
Задача ещё не решена.
Других решений пока нет …