ldqk / Masuit.LuceneEFCore.SearchEngine

基于EntityFrameworkCore和Lucene.NET实现的全文检索搜索引擎
https://masuit.org/1437
MIT License
488 stars 117 forks source link

如何对时间字段或者字段排序? #9

Closed mirbeta closed 3 years ago

mirbeta commented 3 years ago

对时间字段或者字段排序太重要了,设置了排序字段后排序字段优先,其次Score排序,找了好久好像都没找到,

ldqk commented 3 years ago

时间字段有参与全文检索吗?

mirbeta commented 3 years ago

有参与,但是试过很多方法都还是不对,依旧还是Score排序

ldqk commented 3 years ago

默认是按score排序的,其次才是按自定义排序

ldqk commented 3 years ago

你可以更新最新版本包,新版支持完全自定义排序了

mirbeta commented 3 years ago

试过了,貌似还是不对...

mirbeta commented 3 years ago

设置了自定义字段排序,和用SetBoosts设置最高 都还是按照score排序的,不知道是不是我哪里使用不对

ldqk commented 3 years ago

应该是Lucene内部的优先评分规则,实在无法满足你的需求还是考虑其他的搜索引擎中间件吧

ldqk commented 3 years ago

改进了一下,DateTime类型的字段转换成了String进行存储,应该可以按时间优先排序了。
示例:先按ModifyDate字段倒序排序再按Score排序

searchOptions.OrderBy = new List<SortField>()
{
    new SortField(nameof(Post.ModifyDate),SortFieldType.STRING,true),
    SortField.FIELD_SCORE
};

更新包后先把之前的索引文件删除

ldqk commented 3 years ago

image

mirbeta commented 3 years ago

可以了,解决了,非常感谢~