我用C#创建了一个.net MVC应用程序,它列出了组织,数据库(SQLServer)中目前有6000条记录。组织表中的字段是:
- 酒精支持小组(Alcohol Support Group)
- 联系人(詹姆斯·邦德)
- 内容(我们为有酒精问题的人提供支持)
- 关键词(酒精,成瘾,酗酒)
当前的搜索是使用linq完成的,例如:
iList<Organisation> orglist = myOrgs.Where(x => x.Title.Contains('abc') ||
x.ContactPerson.Contains('abc') ||
x.Details.Contains('abc') ||
x.Keywords.Contains('abc'))
.OrderBy(x => x.Title).ToList();
字符串
结果是按标题排序的,这是不合适的。
如果有人搜索“酒精支持”,我希望在列表的顶部以上的结果。
我想在以下方面对结果进行排名:
1.组织标题中的完整句子匹配。
1.组织标题中的所有搜索词。
1.组织标题中的任何搜索词。
1.组织关键字中的任何搜索词。
1.组织内容中的完整句子匹配。
正在寻找实现这一点的最佳方法的建议,或者是否有人知道已经有任何算法/库可以做到这一点?
更新我现在正在寻找一个更简单的解决方案,请参阅此链接:
2条答案
按热度按时间kxkpmulp1#
总结:
Step 01:R01
字符串
linq 2Sql的这种用法Contains将被转换为sqlWHERE IN
Step 02:R02
型
Step 03:R03
型
Step 04:R04
型
Step 05:R05
型
linq 2Sql的这种用法Contains将被转换为sqlWHERE IN
Step 06 -将ID分组并忽略可重复的ID
我们将根据订单检索对ID进行排序
型
步骤07 -重新排序
型
步骤08 -现在我们将使用Oredred ID获取数据
型
Step 09完整代码
型
注意01:SQL注入
SQL注入是一种代码注入技术,用于攻击数据驱动的应用程序,其中恶意的SQL语句插入到输入字段中以供执行
注01.01:问题
注01.02:Microsoft文档
这些参数在查询文本中使用与Console.WriteLine()和String.Format()相同的 curl 表示法表示。实际上,String.Format()实际上是对您提供的查询字符串调用的,用生成的参数名称(如@p0、@p1...、@p(n). x1c 0d1x)替换带花括号的参数
注01.03:在本项目中
型
型
注01.04:其他格式
vfh0ocws2#
虽然有点晚了,但我认为Mohamed Elrashid建议的解决方案太基本了。问题和答案都假设用户输入永远是无打字错误的!此外,委员会认为,这意味着它们可能不会响应诸如
Support Alcohol
或Alcohol Supported
之类的查询,或者与预期的术语稍有不同的查询Alcohol Support
的值。该值为重要提示:排名是一个独立的问题,与筛选不同。
对于筛选,您可以根据业务目标应用任何条件,以便在搜索结果中显示相关行。
对于排名,您可能需要同时应用不同的策略,可能需要对每个属性(例如,标题和描述)并行应用不同的评分权重。
您可以将字符串的相关性排名转换为一个数值问题。您可以在my blog post中看到不同方法的详细信息。为此,您必须通过应用任何相似性或其他函数(例如Jaccard Index或Levenshtein Distance或混合方法)来计算每行的得分。一旦获得每行的得分,您可以使用默认排序轻松地对它们进行排序。
我还建议避免在数据库端进行繁重的计算,因为它可能会消耗更长时间的数据库资源,从而降低其他简单查询的速度。