Использование MySQL FULLTEXT с PHP для поиска слов длиной менее 4 символов на общем хостинге
У меня есть простой скрипт PHP, который выполняет поиск FULLTEXT внутри базы данных MySQL. Я надеюсь, что есть кое-что, что я могу сделать на стороне PHP, чтобы решить эту проблему, поскольку кажется, что я мало что могу сделать на стороне MySQL.
В настоящее время у меня есть это в классе PHP, и работает 100% на моем локальном хосте, но не удается при загрузке на мой общий хостинг Godaddy.
$pieces = explode(" ", $searchstring);
$searchwords = '';
foreach($pieces as $value) {
$searchwords .= '+'.$value.' ';
}
$sql = "SELECT * FROM items WHERE MATCH ( ItemName, ItemDescription ) AGAINST ('$searchwords' IN BOOLEAN MODE)";
Я провел много исследований, чтобы найти решение этой проблемы, но пока не нашел ответов. Вся документация и форумы предлагают изменить файл my.ini ft_min_word_len=4, например, на ft_min_word_len=0, который отлично работает при тестировании на моем локальном сервере.
Так как мне нужно загрузить свой проект в учетную запись общего хостинга godaddy, я не могу изменить файл конфигурации my.ini, поэтому мне нужно обойти эту ошибку.
Пример того, чего я пытаюсь достичь:
Поищите "iphone 5 LCD", база данных вернет все результаты, которые имеют "iphone", поэтому она покажет все "домашняя кнопка iphone 4", "iphone 3 back", потому что из исходного поискового запроса она пропускает "5" и " lcd 'за то, что меньше 4 символов. В моей локальной копии, поскольку ft_min_word_len имеет значение ft_min_word_len=0, "iphone 5 lcd" возвращает только те элементы, которые мне действительно нужны! Работает просто отлично! Я пытался заполнить короткие слова, такие как "5", "5..." или "5___" или "LCD_" или "LCD*" или "5*", но это не работает. Я прочитал решение, которое предложило "дополнить" короткие слова, но они не объяснили, какие символы использовать.
1 ответ
Не будет работать как LIKE.
Сократите ваши поисковые слова до нужной длины в php, затем запросите WHERE (columnA LIKE '$searchword%' ИЛИ columnB LIKE '$seachword%')
или просто используйте php strlen, чтобы удалить слова короче, чем хотелось бы.