如何解决如何根据结果中搜索词的位置指定NHibernate搜索结果的排名?
| 我有一个分页的搜索结果列表。用户可以搜索\'derp \',并返回名称中任何具有该字符序列的内容。 我被要求更改此设置,以便最初将这组结果按相关性进行排名。因此,如果通常该列表将返回为a derp abc // everything is alphabetical
a derp xyz
b derp abc
derp abc
derp def
herp derp a
herp derp b
现在列表需要按以下顺序排序
derp abc // these guys are given prominence
derp def
a derp abc // the rest of results alphabetical as normal
a derp xyz
b derp abc
herp derp a
herp derp b
请记住,此列表必须分页(例如,我不能只是获取搜索结果并手动从中间移除\'derp \'的出现并将其移到最前面),NHibernate有什么办法我可以指定所需的排名吗?
还是我必须做2个查询,首先搜索以\'derp \'开头的任何内容,第二个搜索以\'derp \'开头但又不以它开头的内容?
解决方法
OrderBy可以使用Projections,因此可以正常工作:
var list = session.QueryOver<Store>()
.Where(s => s.Name.IsLike(\"My\",MatchMode.Anywhere))
.OrderBy(NHibernate.Criterion.Projections.Conditional(
NHibernate.Criterion.Restrictions.Like(
NHibernate.Criterion.Projections.Property<Store>(s => s.Name),\"My\",MatchMode.Start),NHibernate.Criterion.Projections.Constant(0),NHibernate.Criterion.Projections.Constant(1))).Asc
.ThenBy(s => s.Name).Asc
.List();
我们在这里使用的是基本上转换为以下SQL的Projection:
ORDER BY (case when this_.Name like \'My%\' then 0 else 1 end)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。