2017-06-09 52 views
0

我在我的食物搜索和食物表中使用全文索引記錄是多語言的,所以我搜索「jamón」(西班牙語言)食物,但它的搜索列表的末尾,而不是首先顯示,並顯示其他英語(火腿食品)食品中名列榜首我怎麼能先搜索精確的匹配,那麼其他沒有參加搜索查詢太多時間 我這樣的代碼爲什麼西班牙語單詞在全文索引中搜索不正確與exacet匹配

$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

問題是因爲不合適Character sets & collations。如果您在該字段上的搜索始終是重音敏感的,那麼將該字段的排序規則聲明爲utf8_bin(它將比較utf8編碼的字節的相等性),還是使用特定於語言的排序規則來區分重音符號和un有趣的人物。

在我的版本(MySql 5.0)中,不區分大小寫,區分重音的任何utf8字符集比較。 utf8唯一的口音敏感整理是utf8_bin。但它也是區分大小寫的。

例:

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

Reference 1

Reference 2

相關問題