Hibernate search 如何在HIbernate搜索中对同一字段进行搜索和排序
我正在使用HibernateSearch6配置为elasticsearch后端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
@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重新创建它们。在对字段进行排序后,我重新编制了索引,但看起来需要删除并重新编制索引