这就是我现在作为一个非常基本的搜索:
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个关键字(在’Body’nvarchar(MAX)字段中),则它应该高于仅与1个关键字匹配的记录B.我不需要完全计算每一次打击…但是,如果那个eaiser管理那将是好的.
那么有没有什么方法可以直接将命中数作为orderby的一部分直接获得?我可以通过获取结果和解析来管理它,但是我真的不想这样做,因为解析可能有数千人可能会破坏IIS机器,而SQL Server是一个相当强大的集群:)
如果有人有任何想法或提示,那将是一个很大的帮助.
最佳答案 如果我理解正确你想要调用OrderyByDescending(p => p.Body),但它应该按照p.Body中某个单词的推荐次数排序?
然后你应该能够创建一个计算事件的方法并返回计数,然后你可以简单地做OrderyByDescending(p => CountOccurences(p.Body))
您也可以创建一个实现IComparer的BodyComparer类,然后将其传递给OrderByDescending
编辑:
看看这个链接Enable Full Text Searching