ホーム>source

私はJavaが初めてです。 ElasticSearch からデータを取得したい JSON としてのインデックス 。私はウィズウィズを知っていますこれを達成するのに役立ちます。私はこれを見つけましたElasticsearch-Java RestHighLevelClient-スクロールAPIを使用してすべてのドキュメントを取得する方法 そして、この答えについて試してみました。しかし、それはエラーを示しています。

これが私が試したコードです:

<前>ウィズウィズ

多くのエラーが表示されます。誰かが Scroll API からすべてのデータをJSONとして取得するのを手伝ってくださいインデックスを作成して変数にロードします。いくつかの解決策を教えてください。

私は 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); } } でこれを行いましたたった8行で
ここにあります:

<前>ウィズウィズ

しかし ElasticSearch では 、多くのコードが必要です。それでも、 python からデータを取得できません 。誰でも私がこの問題を解決するのを手伝ってくれます。

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)
あなたの答え
  • 解決した方法 # 1

    RestHighLevelClientでスクロールを使用したい場合に従う必要がある手順は次のとおりです。

    1)SearchRequestを作成します。

    <前>ウィズウィズ

    2)最初の検索を実行します。

    <前>ウィズウィズ

    ここでのクライアントはRestHighLevelClientです。

    3)以降のスクロール検索では、SearchScrollRequestを作成し、それをスクロールに使用します。

    <前>ウィズウィズ

    これについてもっと知るには、これを通過することができます

    SearchRequest request = new SearchRequest("test").scroll(new TimeValue(60000)); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(matchQuery("multi", "test")); searchSourceBuilder.sort(FieldSortBuilder.DOC_FIELD_NAME, SortOrder.ASC); request.source(searchSourceBuilder);

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ hibernate - 原因:javalangClassNotFoundException:要求されたクラスをロードできませんでした:modelsCategory