代码之家  ›  专栏  ›  技术社区  ›  JohnFx

在SQL中查找类似值的性能技术?

  •  0
  • JohnFx  · 技术社区  · 17 年前

    一种计算levenshtein距离的方法似乎很理想,但它涉及太多的字符串操作/比较,并且可能会不好地使用SQL索引。

    我考虑过按列的左(X)个字符进行增量分组,这是最大化索引使用的一种不错的方法,但这种方法实际上只在查找单词末尾有差异的单词时有效。

    有没有人有一些好主意可以在SQL中有效地解决这个问题?

    注意:我意识到这个问题与( Finding how similar two strings are

    3 回复  |  直到 9 年前
        1
  •  2
  •   JP Alioto    17 年前

    您没有提到您使用的数据库是什么,但是如果是t-SQL,您可以使用 SOUNDEX 价值与 difference

        2
  •  1
  •   Tim Cooper    14 年前

    如果您使用的是SQL Server,您可能会考虑使用SOUNDEX()函数,如下所示:

    ...
    where
       SOUNDEX("searchterm") = SOUNDEX(searchvaluefield)
    

    它应该在字符串上进行语音匹配。。。

    一些奇怪的例子。。。因此,似乎你可以通过总是将复数文本添加到两侧来捕捉复数,因为多个的发音相同…:-)

    select soundex('Canine'), soundex('Canines')
    go
    
    ----- ----- 
    C550  C552  
    
    1 Row(s) affected
    
    
    select soundex('Canine'), soundex('Caynyn')
    go
    
    ----- ----- 
    C550  C550  
    
    1 Row(s) affected
    
    
    select soundex('Canines'), soundex('Caniness')
    go
    
    ----- ----- 
    C552  C552  
    
    1 Row(s) affected
    
        3
  •  0
  •   Kirtan    17 年前

    John,如果您使用的是MS SQL Server,您可以利用 Full-Text Indexing 服务全文搜索功能已实现 some powerful functions 使用它,您可以实现这一点。