Получить данные из индекса ElasticSeach в формате JSON с использованием java

Я новичок в java. Я хочу получить данные от ElasticSearch индекс как JSON. Я знаюScroll APIпомогает мне в этом. Я нашел этот Elasticsearch - Java RestHighLevelClient - как получить все документы с помощью scroll api и попытался ответить на этот вопрос. Но это показывает ошибку.

Вот код, который я пробовал:

public class filtersHome {
public static void main(String[] args) throws IOException {
//    Connecting to my Secured Elastic Search
    final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
    credentialsProvider.setCredentials(AuthScope.ANY,
            new UsernamePasswordCredentials("username", "password"));
    RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200))
            .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                @Override
                public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                    return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                }
            });
    RestHighLevelClient client = new RestHighLevelClient(builder);

//    Getting Index Data from ES
    String query = "{'query': {'bool': {'must': [{'match_all': {}}], 'must_not': [], 'should': []}}, 'size': 10000}";
    QueryBuilder matchQueryBuilder = QueryBuilders.boolQuery().must(new QueryStringQueryBuilder(query));
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(matchQueryBuilder);
    searchSourceBuilder.size(5000); //max is 10000
    SearchRequest searchRequest = new SearchRequest();
    searchRequest.indices("football_sum_csv");
    searchRequest.source(searchSourceBuilder);
    final Scroll scroll = new Scroll(TimeValue.timeValueMinutes(10L));
    searchRequest.scroll(scroll);
    SearchResponse searchResponse = client.search(searchRequest);
    String scrollId = searchResponse.getScrollId();
    SearchHit[] allHits = new SearchHit[0];
    SearchHit[] searchHits = searchResponse.getHits().getHits();
    while (searchHits != null && searchHits.length > 0)
    {
        allHits = Helper.concatenate(allHits, searchResponse.getHits().getHits()); //create a function which concatenate two arrays
        SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
        scrollRequest.scroll(scroll);
        searchResponse = client.searchScroll(scrollRequest);
        scrollId = searchResponse.getScrollId();
        searchHits = searchResponse.getHits().getHits();
    }
    ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
    clearScrollRequest.addScrollId(scrollId);
    ClearScrollResponse clearScrollResponse = client.clearScroll(clearScrollRequest);

    }
}

Он показывает множество ошибок. Кто-то помог мне получить все данные в виде JSON из ElasticSearchindex и загрузите его в переменную. Помогите мне с некоторыми решениями.

Я сделал это в pythonвсего в 8 строках
Вот оно:

from elasticsearch import Elasticsearch
es = Elasticsearch('localhost', port=9200, http_auth=('username', 'password'), scheme="http")
query = {'query': {'bool': {'must': [{'match_all': {}}], 'must_not': [], 'should': []}}, 'size': 10000}
results = es.search(index='football_sum_csv', body=query)
res = []
for i in results['hits']['hits']:
    res.append(i)
print(res)

Но в java, требуется много кода. Хотя я не могу получить данные из своегоindex. Кто-нибудь поможет мне решить эту проблему.

0 ответов

Другие вопросы по тегам