我想让用户能够搜索大量的商家名单,但仍能找到近乎匹配的商家。
当你没有针对简单的词典单词,而是针对像ABC商业名称这样的复杂名称时,有没有人有关于如何最好地解决这个问题的建议?
问候。
答案 0 :(得分:7)
查看Levenshtein distance上的维基百科文章。这是一个相当简单的概念,无论你使用哪种语言,C#都可以很好地实现算法。
我在C#中为您here找到了一个示例。
此外,here是Google的Peter Norvig的拼写纠正器示例。有人在SO播客上说过几集,Jon Skeet试图用C#重写同样的算法。不确定他是否已完成和/或公开发布。
答案 1 :(得分:2)
考虑使用关键字匹配并编辑基于距离的相似性。可能会将“原始搜索”与“实际点击”结合起来。
答案 2 :(得分:1)
这可能是一个疯狂的解决方案,但您可以按空格分割商家名称,然后搜索所有商品或可能是第一对商品。
因此,您可以搜索“ABC”和“商家”,但忽略“名称”,因为这可能需要很长时间。
您甚至可以检查字符串是否具有一定长度,然后修剪并只搜索首先说5个字母。
您是否看过“soundex”作为搜索您商家的方式。同样,我认为您需要按空格分割名称。
答案 3 :(得分:1)
您可以查看SQL Server SOUNDEX和DIFFERENCE函数。 SOUNDEX将一系列字符(例如单词)转换为4字符代码,对于类似发音的单词将是相同的。 DIFFERENCE给出一个数字,表示两个字符串基于声音的“不同”。
例如,您可以根据SOUNDEX函数创建一个计算列,并在以后匹配该列。或者您可以在WHERE子句中使用DIFFERENCE。