Получить данные из индекса 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 из ElasticSearch
index и загрузите его в переменную. Помогите мне с некоторыми решениями.
Я сделал это в 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
. Кто-нибудь поможет мне решить эту проблему.