我在食物搜索中使用全文索引,在食物表中记录是多语言的,因此我搜索了“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();
答案 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