这是我现在拥有的非常基本的搜索:
var Results = from p in dx.Listings select p;
if (CategoryId > 0) Results = Results.Where(p => p.CategoryId == CategoryId);
if (SuburbId > 0) Results = Results.Where(p => p.SuburbId == SuburbId);
var OrderedResults = Results.OrderByDescending(p => p.ListingType);
OrderedResults = OrderedResults.ThenByDescending(p => p.Created);
我知道我可以添加 .Contains() 或类似内容并从关键字框中输入关键字(拆分为单个项目),这样应该会得到结果列表。
但是我需要按基本相关性对结果进行排序。这意味着如果记录 A 包含 2 个关键字(在“正文”nvarchar(MAX) 字段中),它应该高于仅与 1 个关键字匹配的记录 B。我不需要每次点击的完整计数...但是,如果这更易于管理,那就没问题了。
那么有什么方法可以很好地直接将命中数作为 orderby 的一部分?我可以通过获取结果和解析来管理它,但是我真的不想那样做,因为解析可能有数千个可能会影响 IIS 机器,而 SQL Server 是一个相当强大的集群:)
如果有人有任何想法或提示,那将是一个很大的帮助。
最佳答案
如果我对你的理解是正确的,你想调用 OrderyByDescending( p => p.Body )
但它应该按某个单词在 p.Body 中出现多少次来排序?
然后您应该能够创建一个方法来计算出现次数并返回计数,然后您可以简单地执行 OrderyByDescending( p => CountOccurences(p.Body) )
您也可以创建一个实现 IComparer 的 BodyComparer 类,然后将其传递给 OrderByDescending
编辑: 看看这个链接Enable Full Text Searching
关于c# - 基于计数的 orderby 相关性的 LINQ 关键字搜索 (LINQ to SQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1322675/