实现智能搜索/模糊字符串比较

我在ASP.NET MVC应用程序上有一个网页,客户可以在其中搜索供应商。 供应商在网站上捕获他们自己的详细信息。 客户想要一个“智能搜索”function,即使供应商拼写与搜索框中输入的内容“略有不同”,他们也可以搜索供应商并找到它们。

我不知道客户的“略有不同”的概念是什么。 我一直在研究实现自定义soundex算法。 这会根据声音的方式将单词转换为数字。 然后将该数字用于比较。

例如:

扎克

扎克

将编码为相同的值。 还有其他我可以考虑的选择吗?

您可以将Levenshtein距离与数据库中供应商的“标签”字段结合使用,以实现“智能搜索”样式function。

这是非常基本的,但适用于’Zack / Zach’等情况。

通过在数据库中添加标签,您可以处理人们可以通过其首字母缩略词或其他口语名称搜索供应商的情况。

请参阅如何计算给定2个字符串的距离相似性度量? 和http://www.dotnetperls.com/levenshtein的实施细节。

您需要的是使用语音分析filter进行索引搜索。

Lucene.NET就是这么做的。

http://lucene.apache.org/core/4_0_0/analyzers-phonetic/org/apache/lucene/analysis/phonetic/PhoneticFilterFactory.html

如何在Lucene.net中执行语音和近似搜索

请参阅此处了解Phonetix的.NET版本:
http://sourceforge.net/projects/phonetixnet/

这里有一些关于如何在C#中实现它的更多信息:
lucene.net语音filter

您还可以使用BeiderMorseEncoder ,它可以处理多种语言 。

关于找到类似拼写单词的主题,为什么不使用模糊搜索呢?
如何在asp.net中的Lucene.net进行模糊搜索?
Lucene.net模糊短语搜索

还有很多字符串度量函数可以通过CLR-Stored-Procedure使用: http : //anastasiosyal.com/post/2009/01/11/Beyond-SoundEx-Functions-for-Fuzzy-Searching-in -MS-SQL服务器