我有一张桌子,比方说,城市名称。有些有重音符号,空格,连字符,小号大写字母,大写字母等......
另一方面,我有一个搜索引擎。
存储城市名称的最佳和最快方式是什么?
知道是否有人正在搜索“ Saint-Locdu-Le-Vieux ”或“ saint-locdu-le-vieux ”或“ Saint Locdu Le Vieux “或”Saînt-Locdu-Lé-Vièux“,它将始终匹配相同的记录。
我想过有两列,一列用于显示,另一列用于搜索索引,其中城市名称将存储为“SAINTLOCDULEVIEUX”。
也许有一个我不知道的功能或更好的方法吗?
感谢阅读:)
答案 0 :(得分:0)
据我所知,没有本机MySQL功能。如果您正在使用MySQL,我建议使用MySQL可能有两列:“display”列显示重音和标点符号字符串,仅用于向用户显示,以及格式化的“查找”列,例如“saint locdu le vieux”。然后可以通过格式化和字符串替换输入字符来完成查找,输入字符带有非重音等效项,带空格的hiphens等的重音,并执行以下查询:
输入:'Saint-Locdu - '
查询:
SELECT * FROM City Where name LIKE '%saint locdu%';
这当然不是一个理想的解决方案。如果您想以规范的方式执行这些查找,则最适合数据结构和solr之类的查询引擎,这是一种抗错误并且对字符不太正确的宽容。但是,我很欣赏这不是你的问题,我只是想把它添加为脚注。