是否可以按创建顺序/日期对Lucene搜索结果进行排序?

是否可以按创建顺序/日期对Lucene搜索结果进行排序?,lucene,lucene.net,Lucene,Lucene.net,简单明了的问题: 是否可以根据搜索结果的创建顺序/日期对其进行排序?添加日期字段并按其排序是一个选项。 但是,索引已经存在,并且包含一组巨大的文档,我想对这些文档进行排序。不要使用docID进行任何操作(除了在查询后获取文档)。它不是连续的,如果您进行更新(实际上是先删除后添加),它不一定是稳定的 只需添加一个表示日期的字段,并在查询中按该字段排序即可 将其设置为数字字段,并将数字格式设置为YYYYMMDDHMMSS。如果你需要更少的精度,只需从右边删除一些数字。或者,如果您想要更好的精度,只需

简单明了的问题: 是否可以根据搜索结果的创建顺序/日期对其进行排序?添加日期字段并按其排序是一个选项。
但是,索引已经存在,并且包含一组巨大的文档,我想对这些文档进行排序。

不要使用docID进行任何操作(除了在查询后获取文档)。它不是连续的,如果您进行更新(实际上是先删除后添加),它不一定是稳定的

只需添加一个表示日期的字段,并在查询中按该字段排序即可

将其设置为数字字段,并将数字格式设置为YYYYMMDDHMMSS。如果你需要更少的精度,只需从右边删除一些数字。或者,如果您想要更好的精度,只需存储刻度值

扩展方法FTW

    public static long AsYMDHMS(this DateTime date)
    {
        return
            (date.Year * 10000000000) +
            (date.Month * 100000000) +
            (date.Day * 1000000) +
            (date.Hour * 10000) +
            (date.Minute * 100) +
            date.Second;
    }

不要使用docID进行任何操作(除了在查询后获取文档)。它不是连续的,如果您进行更新(实际上是先删除后添加),它不一定是稳定的

只需添加一个表示日期的字段,并在查询中按该字段排序即可

将其设置为数字字段,并将数字格式设置为YYYYMMDDHMMSS。如果你需要更少的精度,只需从右边删除一些数字。或者,如果您想要更好的精度,只需存储刻度值

扩展方法FTW

    public static long AsYMDHMS(this DateTime date)
    {
        return
            (date.Year * 10000000000) +
            (date.Month * 100000000) +
            (date.Day * 1000000) +
            (date.Hour * 10000) +
            (date.Minute * 100) +
            date.Second;
    }

AFAIK Lucene不在索引中存储创建日期。但文件编号不是按顺序排列的吗?(我刚检查过,他们)不知道这个事实。那么,我们可以假设默认结果集是按文档id按asc排序的吗?啊,据我所知,这些id不是唯一的,特别是在多个索引中使用时。但最有可能确保一致的创建顺序。我要再挖一点。是的,它并不是完美的。显然,确切的解决方案是给每个文档加上时间戳,但对于“足够接近”的解决方案,可能需要依赖于文档ID。但是你需要弄清楚在段合并和其他维护任务中,文档ID会发生什么变化。一旦他们看到了它,每隔两周就会有新的需求出现,有一段时间,我三次重新索引了150万个文档。也许只是添加索引日期字段并重新编制索引是处理它的最佳方式——在确保它们没有准备好向您抛出其他内容之后。创建新索引时,可以通过搜索现有索引来屏蔽用户。AFAIK Lucene不会在索引中存储创建日期。但文件编号不是按顺序排列的吗?(我刚检查过,他们)不知道这个事实。那么,我们可以假设默认结果集是按文档id按asc排序的吗?啊,据我所知,这些id不是唯一的,特别是在多个索引中使用时。但最有可能确保一致的创建顺序。我要再挖一点。是的,它并不是完美的。显然,确切的解决方案是给每个文档加上时间戳,但对于“足够接近”的解决方案,可能需要依赖于文档ID。但是你需要弄清楚在段合并和其他维护任务中,文档ID会发生什么变化。一旦他们看到了它,每隔两周就会有新的需求出现,有一段时间,我三次重新索引了150万个文档。也许只是添加索引日期字段并重新编制索引是处理它的最佳方式——在确保它们没有准备好向您抛出其他内容之后。创建新索引时,可以通过搜索现有索引来屏蔽用户。