为什么我无法在Laravel应用程序中搜索短词?

时间:2019-06-20 12:11:10

标签: mysql laravel full-text-search

这是我的搜索功能。有了它,我可以完美地搜索整个单词和数字。但是,我无法搜索“ the”之类的短词。

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 servel,然后在mysql中使用以下命令继续重建全文表:

set GLOBAL innodb_optimize_fulltext_only=ON;
OPTIMIZE TABLE table_name;

然后我又重新启动了mysql服务器,什么也没有。当我搜索“ the”,“ of”,“ at”等时没有结果。

所以我的问题是,我应该怎么做才能搜索短单词和数字值(例如“ 10”或“ 20”等)?

提前谢谢!

编辑:

这是我通过Laravel创建全文搜索的方式:

在迁移时,我在Schema::create函数的末尾添加了以下内容

DB::statement('ALTER TABLE news ADD FULLTEXT search(title)');

此外,如果标题中有双数字(如“ 13”),则搜索13时无法得到结果。

一个后续问题:

是否可以在FULLTEXT搜索中搜索部分匹配单词?目前,我将字符串中的单词弄乱,并生成诸如“ + search + string + here”之类的字符串,如果标题中存在单词“ searched”,是否可以找到匹配项?

2 个答案:

答案 0 :(得分:1)

您提到的单词称为停用词(经常出现而被忽略)

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

您可以创建一个新的(较短的)列表并使用它。请确保将文档更改为Mysql版本。

答案 1 :(得分:0)

要在句子中搜索单词,请使用以下方法:

preg_match("/{$wordsOrSentenceFromDB}/i", $WordsYouEnteredFromForm);