我有一张表,其中包含城市名称。有些有重音符号、空格、连字符、小型大写字母、大写字母等...
另一方面,我有一个搜索引擎。
存储城市名称的最佳和最快方法是什么?
知道如果有人正在搜索“Saint-Locdu-Le-Vieux”或“saint-locdu-le-vieux”或“Saint Locdu Le Vieux”或“Saînt-Locdu-Lé-Vièux”,它将始终匹配相同的记录。
我想到有两列,一列用于显示,另一列用于使用索引进行搜索,其中城市名称将存储为“SAINTLOCDULEVIEUX”。
也许有一个我不知道的功能或更好的方法?
感谢您的阅读:)
最佳答案
据我所知,MySQL 没有原生功能可以实现这一点。如果您为此使用 MySQL,我建议可能有两列:显示重音和标点字符串的“显示”列,仅对向用户显示有用,以及格式化的“查找”列,例如“saint locdu le vieux”。然后可以通过格式化和字符串替换输入字符来完成它的查找,其中带重音的输入字符为非重音的等效字符,带空格的 hihens 等,并执行如下查询:
输入:'Saint-Locdu-'
查询:
从名称类似“%saint locdu%”的城市中选择*;
这当然不是一个理想的解决方案。如果您想以规范的方式执行此类查找,则最适合像 solr 这样的数据结构和查询引擎。 ,这是防错字的并且可以容忍字符不完全正确。不过,我很高兴这不是你的问题,我只是想将其添加为脚注。
关于mysql - mysql 存储和搜索字符串的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26421577/