首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elasticsearch -从json文件加载ILM策略

Elasticsearch -从json文件加载ILM策略
EN

Stack Overflow用户
提问于 2019-06-17 17:13:39
回答 1查看 193关注 0票数 0

我已经通过JAVA api实现了一个ILM策略。我的代码看起来像这样:

代码语言:javascript
复制
        Map<String, Phase> phases = new HashMap<>();

    Map<String, LifecycleAction> hotActions = new HashMap<>();
    hotActions.put(RolloverAction.NAME,
            new RolloverAction(new ByteSizeValue(30, ByteSizeUnit.GB),
                    new TimeValue(maxDaysPerIndex, TimeUnit.DAYS),
                    maxRecordsPerIndex));
    phases.put("hot", new Phase("hot", TimeValue.ZERO, hotActions));

    Map<String, LifecycleAction> warmActions = new HashMap<>();
    warmActions.put(ForceMergeAction.NAME, new ForceMergeAction(1));
    phases.put("warm", new Phase("warm", TimeValue.ZERO, warmActions));

    Map<String, LifecycleAction> deleteActions = Collections.singletonMap(DeleteAction.NAME, new DeleteAction());
    phases.put("delete", new Phase("delete", new TimeValue(retentionPeriodDays, TimeUnit.DAYS), deleteActions));

    LifecyclePolicy policy = new LifecyclePolicy("my_policy", phases);

    restHighLevelClient.indexLifecycle()
            .putLifecyclePolicy(new PutLifecyclePolicyRequest(policy), RequestOptions.DEFAULT);

现在,作为JSON的策略如下所示:

代码语言:javascript
复制
"my_policy" : {
"version" : 3,
"modified_date" : "2019-06-17T08:33:08.356Z",
"policy" : {
  "phases" : {
    "warm" : {
      "min_age" : "0ms",
      "actions" : {
        "forcemerge" : {
          "max_num_segments" : 1
        }
      }
    },
    "hot" : {
      "min_age" : "0ms",
      "actions" : {
        "rollover" : {
          "max_size" : "30gb",
          "max_age" : "1d",
          "max_docs" : 5000000
        }
      }
    },
    "delete" : {
      "min_age" : "29d",
      "actions" : {
        "delete" : { }
      }
    }
  }
}

}

现在,我不想使用java api创建策略,而是创建一个json文件,并将其作为策略加载,如下所示:

代码语言:javascript
复制
JsonFILE jsonFile = loadJsonFromFile("fileName");
LifecyclePolicy policy = new LifecyclePolicy("my_policy", jsonFile);
restHighLevelClient.indexLifecycle().putLifecyclePolicy(new 
PutLifecyclePolicyRequest(policy), RequestOptions.DEFAULT);

底线--有没有办法通过JAVA加载一个配置ILM策略的json文件?

EN

回答 1

Stack Overflow用户

发布于 2019-11-03 12:11:09

您可以使用低级客户端,而不是高级客户端来直接request ES REST APIs

代码语言:javascript
复制
RestClient restClient = RestClient.builder(
    new HttpHost("localhost", 9200, "http")).build();

String source = new String(Files.readAllBytes(
    new File("path/to/file.json", StandardCharsets.UTF_8);

Request request = new Request("PUT", "_ilm/policy/name");
request.setJsonEntity(source);

restClient.performRequest(request);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56628231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档