Почему я не могу искать короткие слова в приложении Laravel? - PullRequest
1 голос
/ 20 июня 2019

Это моя функция поиска. С его помощью я могу искать целые слова и цифры отлично. Тем не менее, я не могу искать короткие слова, такие как «.»

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». Можно ли найти совпадение, если в заголовках существует слово «искомый»?

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Упомянутые вами слова известны как стоп-слова (слишком часто, которые игнорируются)

https://dev.mysql.com/doc/refman/8.0/en/fulltext-stopwords.html#fulltext-stopwords-stopwords-for-innodb-search-indexes

Вы можете создать новый (более короткий) список и использовать его. Убедитесь, что выизмените документацию на вашу версию Mysql.

0 голосов
/ 20 июня 2019

чтобы выполнить поиск слов в ваших предложениях, используйте это:

preg_match("/{$wordsOrSentenceFromDB}/i", $WordsYouEnteredFromForm);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...