Запрос в elasticsearch через spring data

Начал изучать elasticsearch и пытаюсь создать запрос в эластиксерч через elasticsearch-spring-data. Данные следующие :

List<Long> bookId;
Long authorId;
Timestamp from;
Timestamp to;

Нужно найти список книг по List<Long> bookId, у которых автор = authorId и книги выпущены с from до to.

То есть подставить в запрос список

List<Long> bookId where author_Id = authorId from ... to...

Как-то так... с помощью чего и как это можно осуществить?


Ответы (1 шт):

Автор решения: Sergey Tsypanov

Одна из ключевых фишек Spring Data * - создание запроса из правильно именованного метода. В вашем случае метод должен быть назван так:

public interface BookRepository extends Repository<Book, Long>
  List<Book> findByAuthorIdAndBookIdInAndIssuedBetween(Long authorId, List<Long> bookIds, Timestamp from, Timestamp to);

Соответственно, возвращаемая сущность, которая мапится на индекс, должна иметь следующие поля:

@Document(indexName="books")
public class Book {
  @Id
  Long bookId;
  Long authorId;
  Timestamp issued;
}

Если вы используете платную "Идею", то она самостоятельно подхватит ваш репозиторный интерфейс и при написании запроса будет подсказывать возможные варианты.

Примеры соотношения имён и генерируемых запросов можно посмотреть здесь: https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.repositories

→ Ссылка