search_after с spring-data -asticsearch - PullRequest
0 голосов
/ 12 июня 2018

Кто-нибудь успешно использовал search_after с spring-data -asticsearch?

Я добавил _uid в свой вид, который корректно помещается в мою Pageable с помощью @Controller.Я включил медленный журнал запросов и проверил, если я вручную запускаю запрос, сгенерированный @Repository, я получаю ответ:

    "sort": [
      1522270372773,
      "log#AWJuYn7SAKReCIGzMYda"
    ]

Я добавил в свое pojo (класс, возвращаемый @Repository):

 @JsonProperty("sort")
 String[] sort;

Сортировка всегда возвращается как ноль.Пробовал пару разных вещей и не могу понять, как настроить сортировку.Есть идеи?

1 Ответ

0 голосов
/ 13 июня 2018

Я решил проблему, но обнаружил некоторые неутешительные детали.

Виновник здесь: https://github.com/spring-projects/spring-data-elasticsearch/blob/3.0.x/src/main/java/org/springframework/data/elasticsearch/core/DefaultResultMapper.java

В методе mapResults код заполняет мой POJO из SearchHit.sourceAsString ().sourceAsString предоставляет подмножество исходного JSON, которое не включает в себя массив сортировки, т. е.

   "sort": [
      1522270147602,
      "log#AWJuXxJ_AKReCIGzMYdV"
    ]

Модификаторы доступа (ряды без методов получения и финалов) не обеспечивают элегантного улучшения.В итоге я скопировал DefaultResultMapper и реализовал метод, похожий на setPersistentEntityId, который устанавливает sortValues ​​в моем pojo.Значение этого метода следующее:

private <T> void setSearchSortValues(T result, Object[] sortValues, Class<T> clazz) {

    if(SortAware.class.isAssignableFrom(clazz)) {
        ((SortAware) result).setSortValues(sortValues);
    }

}

В моем POJO реализован интерфейс SortAware, который я определил следующим образом:

public interface SortAware {

    public Object[] getSortValues();

    public void setSortValues(Object[] sortValues);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...