【问题标题】:MS SQL - WHERE substring matches are phonetic?MS SQL - WHERE 子字符串匹配是拼音吗?
【发布时间】:2011-08-14 02:07:05
【问题描述】:

我想做一个搜索功能,根据“听起来像”匹配进行搜索。

例如,假设我有一个如下所示的公司列表(假设我们也生活在 Bizzaro 世界):

  • 极致
  • Alusion cite LTD
  • 一切就绪的幻觉网站INC
  • 除同意
  • 同意视线

(或名称类似的东西...GeorgeJeorge ?“Yah-way”或“ye-hova”?)

当有人搜索“听起来像”soundex("site") == S230 的内容时,他们应该也会看到“Sight”的结果。

正如大多数以前使用过 soudnex 的人已经知道的那样,普通的子字符串匹配显然不会这样做。

我正在尝试在脑海中研究如何制作一个可以基于此匹配的 WHERE 子句,因此我想运行一个 soundex,而不是典型的 WHERE company LIKE input。显然,如果我对整个公司名称运行 soundex,我将无法进行子字符串搜索(例如,搜索“ALL”的用户永远不会匹配“All ready”的 soundex)。 Soundex 对每个单词进行拆分也可能不值得,所以我不确定运行 soundex 的所有组合是否是一个好主意……或者即使这在具有超过 1000 条记录的数据库中在计算上是可行的。

基本上,我想要的互动是(在办公室或其他地方)Tom 对 Sally 说“那个名字有点像 Rebekkah Schwartzkopff”,并且可以通过语音搜索模糊匹配。

显然,由于 soudnex,我们会遇到非英文名称公司的问题,但我愿意在这个问题上妥协。

我想在不向数据库或存储过程中添加任何内容的情况下执行此操作。

【问题讨论】:

    标签: sql-server tsql sql-server-2008


    【解决方案1】:

    如果 SOUNDEX 是您正在做的事情的一个良好开端,您可以使用DIFFERENCE

    例如:

    SELECT *
    FROM Person
    WHERE DIFFERENCE(Person.FirstName, 'George') >= 3
    

    请注意,DIFFERENCE 函数使用 0-4 的值返回两个字符串的 SOUNDEX 值之间的差值; 4 表示字符串非常接近,0 表示它们完全不同(对我来说有点向后缩放,但我想它有效)。

    【讨论】:

    • 如果您真的无法向数据库添加任何内容,那么差异可能是您的最佳选择
    【解决方案2】:

    非常有趣的问题。我四处摸索了一下,发现了这个:

    http://www.codeproject.com/KB/database/dmetaphone4.aspx

    我自己没有测试过,但似乎值得一试。

    这需要您向数据库中添加一些内容,但我看不出如何使用内置 SQL Server 功能实现您想要的功能...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-07
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多