C#模糊搜索

时间:2014-11-12 12:24:53

标签: c# sql-server webforms fuzzy-search

我有一个包含记录的数据库,一些属性构成一个地址。我有一个c#网络应用程序,其特点是按地址搜索,但我需要的不仅仅是通配符符号来检索匹配项。有没有办法从网络应用程序实现模糊/粗略搜索?

我的两个参数是:
Address
Postcode

只需要填充一个即可完成搜索。使用这两个参数进行搜索也应该是一个可用的选项。

1 个答案:

答案 0 :(得分:2)

模糊匹配通常不会内置到DB中,因为没有有效的方法以这种方式索引列。基本上,您要么必须在每一行上运行模糊匹配算法,要么必须为每一行创建每个可能的模糊匹配的索引。一个会使搜索速度变慢,另一个会使插入速度变慢并大幅增加数据库的大小。基于精确的模糊匹配和容差,可以有一个可以实现的混合解决方案,但这不是一项简单的任务。我自己的模糊匹配经验总是要有一个必须完全匹配的索引,这样我必须运行模糊匹配的数据量才会受到限制。如果在您的情况下不可能,那么构建所有匹配模糊匹配的索引可能是唯一的解决方案。最后,您可能需要备份并询问自己是否确实需要模糊匹配,或者您是否需要将地址查找分解为数字部分和街道名称。在您尝试查找之前,可以从用户输入的地址中提取这两者。然后,您只需要将数据和街道部分分别存储在数据库中。

修改

一种选择是对地址的数字部分进行精确匹配,从数据库中获取结果,并使用街道部分的模糊匹配来消除和排序结果。但是这可能会变得棘手,一些奇怪的球地址可能没有数字部分,或者如果用户拼出数字部分如“One Main St”。另外,解决此问题的最佳方法是为地址的数字和街道名称部分创建单独的列,这意味着更新数据库并对数据进行一些解析。然后你可能不得不处理地址中的其他问题,如“SW”和“South West”,这可能导致模糊匹配失败。