sql – 数据库中的名字变体

前端之家收集整理的这篇文章主要介绍了sql – 数据库中的名字变体前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图确定在数据库中找到名字的最佳方式是什么.例如,我搜索比尔·史密斯.显然,我希望它回到“比尔·史密斯”,但我也希望返回“威廉·史密斯”或“比利史密斯”,甚至“威利史密斯”.我最初的想法是建立一个名字层次结构,但我不知道我可以在哪里获得这样的数据,如果它甚至存在.

由于用户可以搜索目录,我以为这将是一个关键的功能.例如,我去上学的人叫我乔,但我现在总是约瑟.所以,我正在用最后一个名字进行语音搜索,无论是使用NYSIIS还是Double Metaphone,然后使用这个名字进行搜索.有没有更好的方式来做到这一点 – 也许某种渐进的相关性使用全名搜索而不是全名搜索,而不是第一个和最后一个名字的两部分搜索?我认为,如果我将一个名称存储为一个单一的值而不是多个值,那么它可能有助于更多的搜索选项,而不必以名字命名用户.

就平台而言,我正在使用sql Server 2005 – 但是,我将一些匹配的代码转换成代码并不会有问题;例如,为用户预先播种语音密钥,因为它们不会改变.

任何想法或指导将不胜感激.无数搜索几乎变得空虚.谢谢!

编辑:似乎有两个非常明显的功能阵营,我现在绝对坐在中间.我可以看到一个全文搜索的论据 – 很可能是由于缺乏数据规范化,而多部分的方法使用了不同标准的不同部分的名称.

问题最终归结于用户意图.比尔/威廉的例子是一个很好的例子,因为它显示了基于使用形式的名字的突变.我认为构建一个名称层次结构是更准确(可扩展)的解决方案,但将会变得更加复杂.模糊搜索方法更容易实现,牺牲了准确性.这是一个公平的比较吗?

解决方案:在进行一些测试之后,我决定采用一种方法,初始注册将全名,我将其分为多个字段(姓,姓,中,后缀等).由于我确信这不完美,我将允许用户编辑“零件”,包括添加少女或替代名称.就搜索而言,使用任一解决方案,我将需要维护在数据库表或同义词库中存在哪些变体.在这种情况下,也没有优势.我认为这将会降低表现,我将不得不实际运行一些基准来确定哪个是最好的.谢谢大家,为您的投入!

解决方法

不,全文搜索将无助于解决您的问题.

我想你可能想看看以下链接:(有趣的是,没有人提到SoundEx到现在)

> SoundEx – MSDN
> SoundEx – Google results
> InformIT – Tolerant Search algorithms

基本上SoundEx允许您评估类似的声音词中的相似度.该功能也可在sql 2005上使用.

作为一个侧面问题,而不是返回类似的结果,用户可能会更直观地使用基于AJAX的脚本来在用户启动他/她的搜索之前提供类似的声音名称.这样可以显示用户“相似的名称”或“你的意思是…”的数据.

猜你在找的MsSQL相关文章