Вот один пример. У меня есть список отелей в базе данных, и я хочу выполнить поиск по названию. Название одного из отелей - «Taj Wellington Mews Mumbai». Ожидаемый поисковый запрос для него — «тадж-мумбаи».
Вот что я пробовал:
- При использовании LIKE поисковый запрос вообще не соответствует названию.
- Я создал полнотекстовый индекс и попробовал Match() Against(), он возвращает любой отель, который содержит слова «тадж» или «мумбаи», например «Сент-Реджис Мумбаи».
- Я разделил запрос на слова и удалил некоторые слова, добавив + перед каждое слово, чтобы база данных включала каждое слово.
Код: Выделить всё
$q = sanitize($_POST['search']);
$qParts = explode(' ', $q);
$fullTextQuery = '';
$filterWords = [
'the', 'in', 'of', 'from', 'and', 'a', 'an'
];
foreach ($qParts as $key) {
if(in_array(strtolower($key), $filterWords))
return;
$fullTextQuery .= '+'.$key.' ';
}
$searchQuery = "SELECT name, link FROM hotels WHERE MATCH(name) AGAINST ('$fullTextQuery' IN BOOLEAN MODE) AND status = 2";
Будем признательны за любые предложения.
Подробнее здесь: https://stackoverflow.com/questions/790 ... ite-search
Мобильная версия