Для моего приложения мне нужно выполнить пользовательский подсчет эластичности, я хочу использовать для этого аннотацию @Query в используемом нами ElasticsearchCrudRepository. Когда я использую следующую подпись:
@Query("CUSTOM BOOL QUERY HERE")
long countItemsCustom();
Это приводит к исключению java.lang.IllegalArgumentException: Expected 1 but found 30 results
, поскольку выполняется как запрос, а не подсчет. Для spring-data-cassandra у нас есть специальная аннотация @CountQuery для решения этой проблемы. Есть ли подобное решение в spring-data-elasticsearch?
Я мог бы использовать эластичный клиент или шаблон для выполнения пользовательского запроса и получения результатов, но я предпочитаю использовать для этого существующий интерфейс репозитория, если это возможно.
Нет, это невозможно в данный момент. Класс ElasticsearchStringQuery
проверяет тип возвращаемого значения метода, который помечен аннотацией @Query
, а затем выполняет метод ElasticsearchOperations.queryFor...()
, соответствующий типу возвращаемого значения метода. Это запросы для данных, а не для подсчета.
Я создал задачу в Spring Data Elasticsearch Jira, чтобы добавить эту функцию.