9

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

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

例如:

扎克

扎克

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

4

2 回答 2

8

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

这是非常基本的,但适用于诸如“Zack/Zach”之类的情况。

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

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

于 2014-07-25T06:28:49.493 回答
7

What you need is an indexed search with a phonetic analysis filter.

Lucene.NET offers just that.

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

How to perform Phonetic and Aproximative search in Lucene.net

See here for the .NET version of Phonetix:
http://sourceforge.net/projects/phonetixnet/

Here some more info on how to implement it in C#:
lucene.net phonetic filter

You can also use a BeiderMorseEncoder, which is designed to handle many languages.

On the subject of finding similarly spelled words, why not using a fuzzy search instead ?
how to do fuzzy search in Lucene.net in asp.net?
Lucene.net Fuzzy Phrase Search

There are also a whole lot of string metrics functions that you could use via CLR-Stored-Procedure: http://anastasiosyal.com/post/2009/01/11/Beyond-SoundEx-Functions-for-Fuzzy-Searching-in-MS-SQL-Server

于 2014-07-25T05:47:53.313 回答