Это моя функция поиска. С его помощью я могу искать целые слова и цифры отлично. Тем не менее, я не могу искать короткие слова, такие как «.»
public function search($search)
{
$goodString = $this->makeString($search);
$search_results = Model::select('*')->selectRaw('MATCH(title) AGAINST(? IN NATURAL LANGUAGE MODE) AS relevance', [$goodString])->whereRaw('MATCH(title) AGAINST(? IN NATURAL LANGUAGE MODE)', [$goodString])->orderBy('relevance', 'desc');
return $search_results;
}
Я использую:
mysql Ver 14.14 Distrib 5.7.26, for Linux (x86_64) using EditLine wrapper
Ubuntu 16.04
Я внес изменения в конфигурацию mysql /etc/mysql/my.cnf
и установил следующее:
[mysqld]
innodb_ft_min_token_size = 2
ft_min_word_len = 2
После этого я перезапустил сервер MySQL и продолжил перестраивать свои полнотекстовые таблицы с помощью следующих команд в MySQL:
set GLOBAL innodb_optimize_fulltext_only=ON;
OPTIMIZE TABLE table_name;
Затем я снова перезапустил сервер mysql и ничего. Нет результатов при поиске "the", "of", "at" и т. Д.
Итак, мой вопрос: что мне делать, чтобы иметь возможность искать короткие слова и числовые значения, такие как «10» или «20» и т. Д.?
Заранее спасибо!
EDIT:
Вот как я создал полнотекстовый поиск через Laravel:
При переносе я добавил следующее в конце функции Schema::create
DB::statement('ALTER TABLE news ADD FULLTEXT search(title)');
Кроме того, если в названии есть двойное число, например «13», я не могу получить результаты при поиске 13.
Следующий вопрос:
Можно ли искать слово с частичным соответствием в поиске FULLTEXT? В настоящий момент я разбиваю слова строки и делаю такие строки, как «+ search + string + here». Можно ли найти совпадение, если в заголовках существует слово «искомый»?