使用匹配的常规字符解析特殊字符

时间:2015-02-06 15:00:05

标签: sqlite

我有搜索输入,您可以搜索葡萄酒。我有一些葡萄酒包含é等字符(例如Dom Pérignon)。

目前,如果我要输入Dom Perignon,那么我不会得到上面的示例葡萄酒。但我希望实现的是,如果我输入e而不是é,我仍会获得Dom Pérignon葡萄酒。

搜索机制本身是基本的。

输入:

<input id="search" type="text" placeholder="Search for wine or producer..." ng-change="search()" ng-model="data.search">

SQL查询:

DB.query("SELECT id, name, ... FROM wines WHERE name LIKE ? OR house_name LIKE ? LIMIT 20", [searchFilter + '%', searchFilter + '%'])

我如何才能实现键入e还能解析包含é的葡萄酒的能力?

1 个答案:

答案 0 :(得分:1)

我会在数据库中添加另一列,其中包含每个名称的“标准化”版本,然后规范化用户输入的每个搜索词,并使用该列检查匹配。

规范化可能涉及将重音字符替换为非重音等价物,将大写字符转换为小写字母,删除空格和连字符等,这样就可以捕捉到许多其他常见的错误拼写。