如何根据结果中搜索词的位置指定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)
    

要回复问题请先登录注册