我有一个基本的数据表,除了它包含一个 Username
列之外,它对于这个例子来说可以是完全通用的。
我想要一个简单的文本框和一个对 Username
字段执行相似性搜索的按钮。我知道我可以使用 .Contains()
方法,它会在 sql 中转换为 LIKE
,但这是正确的做法吗?
其次,假设我在多对多关系中有另一个我也想搜索的项目,在本例中为 Label
。
Data
{
ID,
Name,
...
}
Many
{
DataID,
OtherID
}
Other
{
ID,
Label
}
我最终想找到所有带有类似于某些搜索子句的标签的数据项。我是否再次使用 .Contains?
然后我想在同一个查询中进行排序以获得用户名和标签的最佳匹配; {Username 和 Label} 的组合相似度如何排序?
编辑:LIKE 查询的结果是如何排序的?它只是基于索引,它匹配的二进制文件与不匹配的二进制文件?我想我并不是那么关心每句话的相似度分数,我或多或少只是想知道这个机制。返回 LIKE 查询似乎很容易,但我一直认为 LIKE 是一个糟糕的选择,因为它不使用数据库中的索引。这是真的吗?如果是的话,这有关系吗?
最佳答案
字符串相似度不是 SQL 能做好的事情。您最好的选择可能是找到所有具有相同前两个(或三个,如果需要)字符的匹配项,然后假设这是一个可管理的数字,使用 Levenshtein 距离或类似方法计算客户端的相似性分数(参见 http://en.wikipedia.org/wiki/Levenshtein_distance ).
或者,如果您感到勇敢,您可以尝试这样的事情! http://anastasiosyal.com/archive/2009/01/11/18.aspx
关于c# - 将搜索添加到 linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3895903/