gpt4 book ai didi

c# - 如何根据搜索词在结果中的位置指定 NHibernate 搜索结果的排名?

转载 作者:太空宇宙 更新时间:2023-11-03 22:14:06 25 4
gpt4 key购买 nike

我有一个搜索结果的分页列表。用户可以搜索“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 可以使用投影,所以这会工作得很好:

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 的投影:

ORDER BY (case when this_.Name like 'My%' then 0 else 1 end)

关于c# - 如何根据搜索词在结果中的位置指定 NHibernate 搜索结果的排名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5661769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com