Как искать и сортировать по тому же полю в HIbernate search - PullRequest
0 голосов
/ 10 марта 2020

Я использую Hibernate Search 6, настроенный для бэкэнда эластичного поиска.

@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));
    }));

Я хотел бы иметь возможность сортировать результаты поиска по цене. Для этого я изменил определение поля на

@GenericField(sortable = Sortable.YES)
    private Double price;

Я делаю сортировку следующим образом:

 .sort(f -> f.composite(b -> {
b.add(f.field("price");
 } ) ) 

Я получаю следующее сообщение об ошибке, которое, похоже, было выброшено из Elasti c

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

Я видел Можете ли вы сортировать и искать в одном поле с Hibernate / Lucene? , но я не вижу эквивалентных аннотаций в поиске Hibernate 6

1 Ответ

1 голос
/ 10 марта 2020

Ваш код с sortable = Sortable.YES должен работать так, как вы ожидаете.

Ошибка, возвращаемая Elasticsearch, заставляет меня думать, что ваша схема («отображение», зарегистрированное в кластере Elasticsearch) может быть устаревшей.

Вы можете проверить это, запустив Hibernate Search со стратегией жизненного цикла validate . Если вы получили ошибку, значит ваша схема устарела. Самое простое решение для его обновления - удалить индексы Elasticsearch и позволить Hibernate Search заново их создать.

...