Репозиторий Elastic Search JPA не дает результатов для методов findAll и findBy ... - PullRequest
1 голос
/ 10 октября 2019

Я использую spring-data-эластичный поиск для грубых операций в упругом поиске.

Работает только метод сохранения данных в упругом поиске и метод findById.

findAll и findBy ... метод не работает и выдает пустой ответ.

Я пытался с некоторыми другими версиями в POM

После некоторой отладки я обнаружил, что метод findById фактически отправляет запрос HTTP GET, а findAll / findBy ... отправляет запрос HTTP POST.

В обоих случаях GET / POST эластичный поиск возвращает ответ с данными, которые я проверял на wireshark. который бегал по местному. Я могу видеть попадания в ответ на вызов метода findAll на Wireshark, но это совпадения, которые мы не получаем через репозиторий.

Если я вижу ответ с данными, это означает, что упругий поиск и создание запроса - это нормально. , но проблема заключается в использовании данных в JPA. JPA на самом деле занимается потреблением.

Понятия не имею, что делать дальше.

Класс модели данных


    @Getter
    @Setter
    @NoArgsConstructor
    @AllArgsConstructor
    @Document(indexName = "data", type = "_doc")
    public class Data {

        @Id
        private String id;

        private String title;

        @Field(type = FieldType.Text)
        private Status status;

        private String description;
    }

Класс репозитория


    @Repository
    public interface DataRepository extends ElasticsearchRepository<Data,String> {
        default <S extends Data> S saveWithKafkaPush(S s){
            S s1 = save(s);
            KafkaProducer.produceMessage(s);
            return s1;
        }

        default <S extends Data> Iterable<S> saveAllWithKafkaPush(Iterable<S> iterable){
            Iterable<S> s = saveAll(iterable);
            return s;
        }

        Optional<Data> findByStatus(Status status);
    }

Статус Enum


    public enum Status {
        UNTITLED,
        DRAFT,
        REVIEW,
        APPROVED,
        PUBLISHED;
    }

Класс обслуживания


    @Autowired
    private DataRepository dataRepository;

    public Data findByStatus(Status status){
        Optional<Data> data = dataRepository.findByStatus(status);
        return data.isPresent()? data.get() : null;
    }

    public Data save(Data data){
        return dataRepository.save(data);
    }

    public void deleteData(String id){
        dataRepository.deleteById(id);
    }

Метод findByStatus не работает, но saveDataData работает нормально.

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