2012-03-22 84 views
3

我有以下要求。制作数据库查询“智能”?

我有一个包含城市名称的列表。我将按城市实施搜索选项。

但用户可能无法正确输入城市名称。

实例: 城市“马特勒”有时拼写为“Mathara”。 城市“努瓦拉埃利亚”有时写为“Nuwaraeliya”

我可以保持数据库列的一致性,但即使最终用户使用替代字,我也想返回匹配。

我需要用什么方法来有效地实现这一点?

+0

为什么不创建一个下拉列表,让用户从选择? – Reinard 2012-03-22 09:07:40

+0

mmm ...这不是一个“简单”的搜索。用户可以将城市与许多其他关键字结合起来。 – 2012-03-22 09:09:18

+0

Stackoverflow的职业生涯使用雅虎这种类型的要求。 [结果Nuwaraeliya看起来像这样](http://where.yahooapis.com/geocode?q=Nuwaraeliya)(编辑虽然似乎匹配Narwaliya,Narala,Naral,Naruala,Narhela,Nurwala,Narayola,Kareli,Narhaoli,Norrala但**不** **努瓦拉埃利亚!) – 2012-03-22 09:10:35

回答

1

我觉得上面的问题可以通过使用Levenshtein距离,PHP类似的文字或JaroWinkler相似充分解决。所有的方法都为我提供了足够正确的结果。

Edit Distance Tool

enter image description here

0

你想要类似语音搜索的东西。 存在几种算法。你可以得到一个概述here

这个想法是为你的表添加一个与你的城市012H相同的语音表,并针对它执行搜索(对搜索到的词执行相同的功能后)。

一些RDBMS如Oracle拥有实现预SOUNDEX功能,这可能允许执行无添加的列的搜索。

2

你或许应该实现一个字符串距离检查像Levenshtein distance

更多的方法可以在这里找到:How do you implement a "Did you mean"?

+0

Some Cities可能有两个完全不同的名字,levenshtein的距离非常大对于“马塔拉+马塔拉”这种做法是有效的,但对其他城市来说则不然。另外一些城市听起来可能同样但是完全不同的城市。 – Christian 2012-03-22 09:19:19