Нулевой запрос ElasticSearchRepository не работает

#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();