我有一个基本的数据表,它可以完全通用于此示例,但它包含Username
列。
我想要一个简单的文本框和一个在Username
字段上执行相似性搜索的按钮。我知道我可以使用.Contains()
方法,它会在sql中转换为LIKE
,但这是正确的做法吗?
其次,假设我还想要搜索多对多关系中的另一个项目,在这种情况下Label
。
Data
{
ID,
Name,
...
}
Many
{
DataID,
OtherID
}
Other
{
ID,
Label
}
我最终希望找到所有带有类似于某个搜索子句的标签的数据项。我再次使用.Contains吗?
然后我想在同一个查询中排序以获得Username和Label的最佳匹配;如何对{Username和Label}的组合相似性进行排序?
编辑:LIKE查询的结果如何排序?它只是基于索引,它匹配的二进制文件与它不匹配?我想我并不关心每个人的相似度得分,我或多或少只是想知道这种机制。似乎很容易返回LIKE查询,但我一直认为LIKE是一个糟糕的选择,因为它不使用数据库中的索引。这是真的,如果是这样重要吗?
答案 0 :(得分:1)
字符串相似性不是SQL可以做得好的。你最好的选择可能是找到前两个(或三个必要的)字符的所有匹配,然后,假设这是一个可管理的数字,使用Levenshtein距离或类似的方法计算客户端的相似性得分(见{{3 }})。
或者,如果你感到勇敢,你可以尝试这样的事情! http://en.wikipedia.org/wiki/Levenshtein_distance