Hibernate search 如何在HIbernate搜索中对同一字段进行搜索和排序

Hibernate search 如何在HIbernate搜索中对同一字段进行搜索和排序,hibernate-search,quarkus,Hibernate Search,Quarkus,我正在使用HibernateSearch6配置为elasticsearch后端 @Indexed public class Book extends PanacheEntity{ @FullTextField public String title; @GenericField public Double price; } 我可以在价格字段中筛选价格范围内的书籍,如下所示: Search.session(entityMana

我正在使用HibernateSearch6配置为elasticsearch后端

@Indexed
    public class Book extends PanacheEntity{
      @FullTextField
      public String title;
      @GenericField
      public Double price;
    } 
我可以在价格字段中筛选价格范围内的书籍,如下所示:

  Search.session(entityManager)
                .search(Book.class)
                .predicate(f -> f.bool(b -> {
    b.must(f.range().field("price").lessThan(50));
    }));
 .sort(f -> f.composite(b -> {
b.add(f.field("price");
 } ) ) 
我想能够排序的价格以及搜索结果。 为此,我将字段定义更改为

@GenericField(sortable = Sortable.YES)
    private Double price;
我的工作如下:

  Search.session(entityManager)
                .search(Book.class)
                .predicate(f -> f.bool(b -> {
    b.must(f.range().field("price").lessThan(50));
    }));
 .sort(f -> f.composite(b -> {
b.add(f.field("price");
 } ) ) 
我得到的错误如下,看起来是从Elastic抛出的

Can\u0027t load fielddata on [offer.price] because fielddata is unsupported on fields of type [double]. Use doc values instead.

我已经看到了,但在Hibernate search 6中并没有看到等价的注释。您的代码使用了
sortable=sortable。是的
应该按照您的预期工作

Elasticsearch返回的错误使我认为您的模式(注册到Elasticsearch集群的“映射”)可能已经过时

您可以通过使用
validate
启动Hibernate搜索来检查这一点。
如果出现错误,则表示您的模式已过时。更新它的最简单解决方案是删除Elasticsearch索引,让Hibernate Search重新创建它们。

在对字段进行排序后,我重新编制了索引,但看起来需要删除并重新编制索引