index_not_found_exception, причина = нет такого индекса [Предложение]] — как передать имя индекса в reactiveElasticsearchOperations.search

Я получаю сообщение об ошибке, вставленное в этот вопрос, и это правда: индекса Sugestao нет. Правильное имя — sugestao (обратите внимание на S вместо s).

Насколько я знаю, я не могу создать индекс с прописными буквами. Все идет нормально. Проблема в том, как «заставить» spring-data-elasticsearch искать sugestao вместо Sugestao, поскольку моя модель представляет собой класс java в верхнем регистре? Я предполагаю, что он автоматически подбирает верхний регистр.

В Spring-Data-Elasticsearch-3.2.6 (Elastic версии 6.x) я вижу, что у find есть четкий способ установить как

reactiveElasticsearchOperations.find(
query.build(),
Sugestao.class, // this is the model class
"this_is_my_index_name" //here I can write the name of the index with lower case
)

Как я могу использовать аналогичный подход в Spring-data-Elasticsearch.4 (Elastic версии 7.x). Я пытаюсь использовать поиск, поскольку поиск устарел.

    Flux<SearchHit<Sugestao>> fluxSearchHits =
            reactiveElasticsearchOperations.search(query.build(), Sugestao.class, "sugestao");

И я получаю

Метод search(Query, Class, Class) в типе ReactiveSearchOperations неприменим для аргументов (NativeSearchQuery, Class, String)

Некоторые связанные подвопросы:

  • Кажется, в устаревшей версии Find я мог передать строку, а теперь при поиске ожидается класс. Но какой класс должен установить имя индекса?

  • возможно, я могу установить в другой конфигурации spring-data-elasticsearch имя индекса или настроить его на использование нижнего регистра, и тогда я смогу выполнять поиск без добавления имени индекса.

    Flux> fluxSearchHits = reactiveElasticsearchOperations.search(query.build(), Sugestao.class);




Ответы (1)


Я полагаю, у вас нет аннотации @Document в вашем классе сущностей?

@Document(indexName="sugestao")
public class Sugestao {
  // class stuff
}

Тогда вы можете позвонить

Flux<SearchHit<Sugestao>> fluxSearchHits =
        reactiveElasticsearchOperations.search(query.build(), Sugestao.class);

Если вы хотите явно указать имя индекса, вы можете использовать

Flux<SearchHit<Sugestao>> fluxSearchHits =
        reactiveElasticsearchOperations.search(query.build(), 
                Sugestao.class, IndexCoordinates.of("sugestao");

в документации по API для ReactiveSearchOperations описаны различные методы.

person P.J.Meisch    schedule 16.05.2020