如何搜索字符串EF4.1的最佳匹配?

时间:2012-01-16 04:40:46

标签: entity-framework lambda

我有一个“公司”实体。当用户输入公司名称时,我必须搜索我的数据库是否已存在。我无法按公司名称搜索,因为第二次用户可能会输入不同的名称或拼写错误。即使在那种情况下,我也希望找到最佳匹配。

2 个答案:

答案 0 :(得分:1)

一般情况下可能无法做到这一点。 看看这个样本:

“公司名称” “公司名称”

你不能确定你的用户输入的那个。你可以做这样的事情:

  • 修剪输入公司名称的开头和结尾的间隔,然后将其保存到db
  • 不允许用户在公司名称中输入“”/“之类的字符
  • 使用一个空格字符
  • 替换\ t \ n或多个空格字符彼此完全相邻

在这些行动之后,您可以希望通过String.Contains之类的方法进行搜索(这不完全正确)

另一方面,你可以有一个正则表达式,强制用户输入一个与该表达式匹配的名称,在此之后依赖于你的表达式,你可以准确地搜索名称(注意并非所有表达式都可以帮助你制作它可能的)

祝你好运 Ali Foroughi

答案 1 :(得分:1)

这几乎是不可能的。即使有一些更高级的工具能够纠正常见的拼写错误,它也无法工作,因为这些工具针对特定语言及其词汇(词汇分析) - 公司名称可以包含非词汇(不存在)单词和外来单词所以纠正拼写错误的工具要么会跳过它们,要么通过引入错误的拼写使它们变得更糟(只需使用MS Word语法校正设置为英语并用本地语言键入文本)。

另一个问题是如何在数据库中进行这种拼写校正。拼写校正肯定不是常见查询算法的一部分。它可以是全文搜索的一部分,但我不确定SQL Server是否提供了开箱即用的功能(this MS Connect表示它没有)。

用户必须至少知道公司名称的一部分 - 之后您可以使用@Ali描述的方法。拼写错误是他的错。您可以使搜索过程更加用户友好,例如自动完成提供包含当前键入字符串的公司名称等功能。