我们有一个AWS ElasticSearch域,并且正在向其中写入记录/文档。现在,我已经在Kibana中创建了索引状态/生命周期管理(ISM / ILM)策略,并且可以在Kibana中将策略应用于索引。我现在想在从处理对索引的写入的Java代码中创建索引(使用高级REST API)时应用该策略。
我在高级REST API中没有找到专门允许为索引分配策略的方法,但是我认为我应该能够使用创建索引时使用的RequestOptions对象来执行此操作。该文档非常薄,但是看来我应该基本上可以在Index属性中插入键/值。 例如,当我检查手动分配策略的索引时,找到分配策略的以下键。
"settings" : {
"index" : {
"opendistro" : {
"index_state_management" : {
"policy_id" : "DefaultLifeCyclePolicy_30DayWarm_180DayDelete"
}
},
假设我可以将类似的键插入Index对象似乎是合理的。以下代码似乎应该工作。它的运行没有错误,但是RequestOptions没有任何用处。
boolean isExisting = mAwsClient.indices().exists(new GetIndexRequest(indexNameFull), RequestOptions.DEFAULT);
if (!isExisting) {
RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
builder.addHeader("settings.opendistro.index_state_management.policy_id", mIndexStateMgmtPolicy);
RequestOptions requestOptions = builder.build();
CreateIndexRequest request = new CreateIndexRequest(indexNameFull);
request.mapping(mapping, XContentType.JSON);
CreateIndexResponse createIndexResponse = mAwsClient.indices().create(request, requestOptions);
}
那么,如何使用Java将ISM / ILM策略分配给索引?
顺便说一句,我已经研究过创建索引模板,该模板应该在创建索引时自动分配策略,但是OpenDistro Kibana似乎没有该功能。
答案 0 :(得分:0)
顺便说一句,我看过创建索引模板,该模板应分配给 索引创建时自动执行该策略,但是OpenDistro Kibana 似乎没有该功能。
您可以通过以下方式使用索引模板,以在创建索引时应用ISM策略:
PUT _template/template_1
{
"index_patterns": [
"test-index*"
],
"settings": {
"index": {
"opendistro": {
"index_state_management": {
"policy_id": "DefaultLifeCyclePolicy_30DayWarm_180DayDelete"
}
}
}
}
}
滚动指数:
POST /_aliases
{
"actions" : [
{ "add" : { "index" : "test-index-000001", "alias" : "test-index" } }
]
}
PUT _template/template_1
{
"index_patterns": [
"test-index*"
],
"settings": {
"index": {
"opendistro": {
"index_state_management": {
"policy_id": "DefaultLifeCyclePolicy_30DayWarm_180DayDelete",
"rollover_alias": "test-index"
}
}
}
}
}