Не удается сосчитать вхождения объекта с полем определенного значения внутри вложенного свойства с помощью репозитория Spring Data ElasticSearch - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть сущность Article , и внутри нее есть вложенное свойство, скажем, Метаданные .

Мне нужно сосчитать все статьи, которые имеют определенный поле внутри этого вложенного свойства, скажем, indexed , присвоенное, например, 1.

Java Фрагмент документа:

@Document(indexName = "article", type = "article", useServerConfiguration = true, createIndex = false)
@Setting(settingPath = "/mappings/settings.json")
@Mapping(mappingPath = "/mappings/articles.json")
public class Article {

// getters and setters, empty constructor are omitted for brevity
    @Id
    private String id;

    private Metadata metadata;

// remainder of the body is omitted

}

Фрагмент Metadata.class

public class Metadata {

// getters and setters, empty constructor are omitted for brevity
    private Integer indexed;

// remainder of the body is omitted
}

Запрос, который я использую для получения статей, которые удовлетворяют заданным критериям и которые я помещаю в качестве значения @org.springframework.data.elasticsearch.annotations.Query поверх пользовательского метода :

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "metadata",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "metadata.indexed": 1
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

Мой пользовательский фрагмент репозитория Spring Data ElasticSearch с пользовательским методом:

public CustomSpringDataElasticsearchRepository extends ElasticsearchRepository<Article, String> {

    @Query("The query from above")
    Long countByMetadata_Indexed(int value);
}

Когда я использую метод хранилища, показанный выше, я get java.lang.IllegalArgumentException: Expected 1 but found n results.

Пользовательский метод хранилища данных Spring Elasticsearch (без @Query) возвращает 0 (также версия без подчеркивания 0 ) хотя он должен все вернуть правильно.

Как получить правильные результаты с помощью Sprin g хранилище данных ElasticSearch? Почему пользовательский метод без @Query также не работает?

UPD : Используемая версия spring-data -asticsearch составляет 3.1.1.RELEASE .

1 Ответ

0 голосов
/ 17 февраля 2020

Методы запросов к репозиторию в настоящее время (3.2.4.RELEASE) не поддерживают подсчет по полям внутри вложенных полей.

Как упоминалось ранее, аннотация @Query не поддерживает пользовательские количество запросов по состоянию на последнюю версию (3.2.4.RELEASE) .

Другими словами, в настоящее время единственный способ сделать этот запрос через Spring Data ElasticSearch - это использовать ElasticsearchTemplate bean или ElasticsearchOperations боб.

Кредит : PJMeisch

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