代码之家  ›  专栏  ›  技术社区  ›  Catso

区分重音的全文搜索(MySQL)

  •  0
  • Catso  · 技术社区  · 7 年前

    希望我只是看不到森林的树木,但我的全文搜索行为非常奇怪,我无法解决这个问题(我试图寻找一个解决方案,但到目前为止没有运气,所以非常感谢任何帮助。)

    塔卡 托克 (意思是“案件”)。如果我要找南瓜的话,我显然不想要手机壳之类的东西。

    我的系统是MySQL,每个表都在其中

    这是(简化的)查询:

    SELECT id_item,item_title,tag_name, MATCH (item_title) AGAINST ('tök' IN NATURAL LANGUAGE MODE) AS title_relevance, MATCH (tag_name) AGAINST ('tök' IN NATURAL LANGUAGE MODE) AS tag_relevance 
    FROM item_translations 
    WHERE NULL IS NULL 
    AND (   MATCH (tile_item_title) AGAINST ('+tök' IN NATURAL LANGUAGE MODE ) OR MATCH (tag_name) AGAINST ('+tök' IN NATURAL LANGUAGE MODE ) ) 
    AND id_language=1 
    ORDER BY title_relevance DESC, tag_relevance DESC 
    LIMIT 0,40
    

    PS:关键字并不总是在匈牙利语,因为这个网站是多语种的,所以我需要一个相对灵活的解决方案,这与大多数重音字母(如果可能的话)的作品

    1 回复  |  直到 7 年前
        1
  •  1
  •   Solarflare    7 年前

    字符串比较中的相等由排序规则指定。 general

    校勘包括语言细节。例如西班牙语, n < ñ < o (虽然 n = ñ 对于基本上所有其他语言),对于瑞典语 Y = Ü ß = ss o < ö .

    所以对于匈牙利的网站,你可以选择 utf8_hungarian_ci ,并且如果您的软件可本地化为特定语言(和访问群体),则可能需要调整该列的排序规则,或者让管理员选择一种。不幸的是,对于全文搜索(与诸如 = 或 order by

    tök 进入时 tok ö 在他们的键盘上,实际上想买一个南瓜(并且知道它的匈牙利词)。大多数搜索引擎实际上会尽量不太狭隘,并希望找到 café 当你进来的时候 cafe 咖啡馆 coffee , caffé cafée .

    然而,没有一种语言能以不同的方式处理每一种口音和元音。如果你真的想区分每一个特殊的字符,你可以试试 utf8_bin ). 需要注意的是,它是区分大小写的,但是由于全文搜索总是不区分大小写的,所以这并不重要。如果对该列执行其他字符串比较(例如。 like ),这可能是有问题的。同时,你也会失去特定语言的行为,例如。 是的= 或 =不锈钢 (除非你自己实施)。

    推荐文章