Рубрики
Без рубрики

Как запросить несколько индексов с помощью elasticsearch в Spring boot (Java-приложение)

Как мы все знаем, в elasticsearch есть индексы, которые вы можете запрашивать для получения данных. С весной все просто… Помеченный java.

Как мы все знаем, в elasticsearch есть индексы, которые вы можете запрашивать для получения данных. Это просто с настроенными данными spring или шаблоном rest. Итак, я наткнулся на сложный запрос, который мне нужно выполнить. Так что давайте посмотрим. Запрос, который я должен был выполнить по двум пользовательским индексам разных типов, имеющим некоторые схожие данные. Поэтому я провел некоторые исследования и разработки и узнал о нескольких поисковых запросах. Запросы с несколькими поисковыми запросами позволяют нам запрашивать два или более индекса с запросами для каждого индекса. Ознакомьтесь по ссылке ниже https://www.elastic.co/guide/en/elasticsearch/client/java-rest/master/java-rest-high-multi-search.html

Решение, предоставленное API множественного поиска, было хорошим, но сложным для моего случая, так как у меня были разные индексы, но с одинаковыми полями в обоих, такими как идентификатор пользователя, идентификатор, имя. Поэтому я использую несколько индексов, но с одним поиском и одним запросом. Дай посмотреть.

1.Создайте метод и инициализируйте высокоуровневый клиент Rest (вы также можете использовать его непосредственно в своем основном методе, я просто предпочитаю хранить отдельный код)

 private RestHighLevelClient restHighLevelClient() {
        log.debug("RestHighLevelClient initialization");
        String esHost = // host of elasticsearch
        Integer esPort = // port of elasticsearch
        return new RestHighLevelClient(RestClient.builder(new HttpHost(esHost, esPort)));
    }

2.Метод поиска с помощью запроса

search(keyword: string) {
// Create a Bool query 
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must(query);
// Create a search request 
// pass your indexes in place of indexA, indexB
SearchRequest searchRequest = new SearchRequest("indexA", "indexB");
// CReate a search Source
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
 searchSourceBuilder.query(boolQuery);
 searchRequest.source(searchSourceBuilder);
// Create object to get Response
SearchResponse searchResponse = restHighLevelClient().search(searchRequest, RequestOptions.DEFAULT);
// Parsing response 
SearchHit[] searchHits = searchResponse.getHits().getHits();
}

3.Анализ данных из поиска с помощью цикла Просто передайте поля и приведите тип данных, чтобы получить ожидаемый ответ

for(SearchHit hit: searchHits) {
   Map sourceAsMap = hit.getSourceAsMap();
   String field = (String) sourceAsMap.get("fieldName");
   Integer field2 = (Integer) sourceAsMap.get("fieldName");
}

4.Вот как вы можете выполнить множественный поиск. Просто замените свой запрос, индексы по мере необходимости и проанализируйте данные

Примечание: Вы, должно быть, думаете о том, почему мы не использовали их вместо этого. Это связано с тем, что на данный момент нам требуется всего 3 поля, с которыми можно легко справиться. Для этого мы используем JSONObject. Вы можете создать любой класс или DTO для синтаксического анализа.

Я надеюсь, что это поможет вам, спасибо за чтение.

Кроме того, проверьте Tekraze.com для получения дополнительных статей.

Оригинал: “https://dev.to/balvinder294/how-to-query-multiple-indexes-with-elasticsearch-in-spring-boot-java-app-1ope”