为什么西班牙语单词没有在全文索引中正确搜索与exacet匹配

时间:2017-06-09 05:18:45

标签: php mysql laravel full-text-search

我在食物搜索中使用全文索引,在食物表中记录是多语言的,因此我搜索了“jamón”(西班牙语)食物,但它是搜索结束列表而不是先显示并显示其他英语语言(在列表顶部的食物,所以我怎样才能首先搜索完全匹配,而不需要在搜索查询中花费太多时间 我的代码就像这样

$food_data = Nutrition::whereRaw("MATCH(brand_with_name) AGAINST (? IN NATURAL LANGUAGE MODE)", [$item])
            ->with('guNutrition', 'esNutrition')
            ->limit($per_page)
            ->offset($off_set)
            ->get();

我已经为我的应用程序使用了Laravel和Mysql 我尝试使用以下代码但是它需要花费太多时间而且没有正常工作(没有先显示其他的完全匹配)和西班牙语。只适用于英语

$food_data = Nutrition::whereRaw("MATCH(brand_with_name) AGAINST (? IN NATURAL LANGUAGE MODE)", [$item])
                            ->select('*',\DB::raw('CASE WHEN brand_with_name = "' . $item . '" THEN 1 ELSE 0 END AS score'),\DB::raw('MATCH(brand_with_name) AGAINST ("' . $item . '") AS score2'))
                            ->with('guNutrition', 'esNutrition')
                            ->orderBy('score', 'DESC')
                            ->orderBy('score2', 'DESC')
                            ->limit($per_page)
                            ->offset($off_set)
                            ->get();

1 个答案:

答案 0 :(得分:1)

问题是因为Character sets & collations不恰当。如果您对该字段的搜索始终是重音敏感的,则将字段的排序规则声明为utf8_bin(将比较utf8编码字节的相等性)或使用特定于语言的排序规则来区分重音和非字符串 - 有气味的人物。

在我的版本(MySql 5.0)中,对于不区分大小写,重音敏感的搜索,没有任何utf8字符集整理可用。 utf8唯一的重音敏感分类是utf8_bin。但它也是区分大小写的。

前:

SELECT * FROM `words` WHERE LOWER(column) = LOWER('aBád') COLLATE utf8_bin

Reference 1

Reference 2