【问题标题】:Hibernate Search sorting休眠搜索排序
【发布时间】:2015-07-25 04:38:27
【问题描述】:

Hibernate 搜索是根据相关性对结果进行排序,这是正常的。 除此之外,如果两个文档具有相同的分数,则它们按主键排序。

例如,

book1 : id=1, bookTitle = "hibernate search by example"。

book2 : id=2, bookTitle = "hibernate search in action"

如果我正在执行查询以查找“休眠搜索”一词,我将有以下顺序:book1 然后 book2

我想颠倒这个顺序:book2 然后 book1。 这意味着反转主键顺序。 有没有可能在不实现自定义 Similarity 的情况下做到这一点?同时保持相关性顺序。

【问题讨论】:

    标签: hibernate lucene hibernate-search


    【解决方案1】:

    是的,您需要创建一个Sort 对象来指定所需的排序,并在您的查询中设置它。见Section 5.1.3.3 of the Hibernate docs。然后,在SortFields 的列表中传递SortField.FIELD_SCORE。 SortField 的构造函数还允许您颠倒顺序。

    org.hibernate.search.FullTextQuery query = s.createFullTextQuery( luceneQuery, MyEntity.class );
    org.apache.lucene.search.Sort sort = new Sort(
        SortField.FIELD_SCORE, 
        new SortField("id", SortField.STRING, true));
    query.setSort(sort);
    List results = query.list();
    

    【讨论】:

    • 如果我使用排序对象,我是否保持休眠搜索的评分顺序?在上面的示例中,如果我查找“hibernate search”,id = 3 且仅包含术语“hibernate”的文档将排在 id = 2 和 id = 1 之后的第三位?即使我颠倒了身份顺序?
    • 我这么说是因为我尝试过 ("id", SortField.LONG, true),它工作正常,但顺序仅取决于 id 而不是 id 和文档分数
    • 这就是为什么 Sort ctor 中的第一个 SortField 必须是 SortField.FIELD_SCORE。这告诉它首先按分数排序。
    • 谢谢我没看到,我去试试
    • 如果我只想要 10 条记录,根据输入参数按分数、升序或降序排序怎么办?
    猜你喜欢
    • 1970-01-01
    • 2019-07-13
    • 2011-11-17
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    相关资源
    最近更新 更多