#spring-boot #elasticsearch #spring-data-elasticsearch
#весенняя загрузка #elasticsearch #spring-data-elasticsearch
Вопрос:
У меня есть обзорный документ
@Document(indexName = "apkreview")
public class ApkReview {
@Id //The unique id
private Long id;
private Long apkId;
private String comment;
private Date commentDate;
//each review is linked to one user
private String appUserId;
@Transient
@JsonProperty
private String username;
//app user stars
private int stars;
private String response;
private Date responseDate;
}
Я хочу подсчитать все обзоры по apkId, где комментарии не равны нулю
В моем репозитории я сделал это:
int countByApkIdAndCommentIsNotNull(Long apkId);
Я получил эту ошибку :
{«статус»: «ОШИБКА»,»HttpCode»:500, «сообщение»: «Обнаружены недопустимые критерии ‘IS_NOT_NULL (0): [IsNotNull, NotNull]’.», «stackTrace»: null}
Пожалуйста, почему этот код не работает?
Ответ №1:
В настоящее время IsNotNull (или существует) не поддерживаются Spring Data Elasticsearch. Вы можете проверить поддерживаемые ключевые слова в документации.
Не стесняйтесь создавать проблему в Jira, чтобы добавить это.
Комментарии:
1. Спасибо за ваш ответ. Я решил сделать что-то вроде этого
int countByApkIdAndCommentNot(Long apkId, String comment);
и вызвать его со значением поля комментария = null, но все еще не могу получить правильный результат. Я пробовал с comment = «», то же самое. В Kibana, когда нет комментариев, kibana показывает null, но почему я не могу использовать comment = null ?
Ответ №2:
Я, наконец, сделал это так:
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.matchQuery("apkId", apkId)
.operator(Operator.AND))
.withQuery(QueryBuilders.existsQuery("comment"))
.build();
Page<ApkReview> apkList = apkReviewRepository.search(searchQuery);
// count apk review with comment
int reviewWithNoteNumber = (int) apkList.getTotalElements();