Elasticsearch 滚动索引创建

1、创建滚动策略

可以在Kibana中新建 ,也可以通过API 创建

API 创建

PUT _ilm/policy/dns_policy   
{
  "policy": {                       
    "phases": {
      "hot": {                      
        "actions": {
          "rollover": {             
            "max_size": "50GB",
            "max_age": "30d"
          }
        }
      },
      "delete": {
        "min_age": "90d",           
        "actions": {
          "delete": {}              
        }
      }
    }
  }
}

 

2、将策略应用到策略模板当中

PUT _template/dns_template
{
  "index_patterns": ["dnslog-*"],                 
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1,
    "index.lifecycle.name": "dns_policy",      
    "index.lifecycle.rollover_alias": "dnslog"    
  }
}

a.此模板将应用于所有以dnslog-开头的索引.

b.模板将把策略设置为dns_policy.

c. 索引周期滚动的别名为dnslog

 

3、创建一个初始索引

 

PUT dnslog-000001
{
  "aliases": {
    "dnslog":{
        "is_write_index": true  
    }
  }
}

  注意aliases 中的别名为dnslog ,和第二步骤中的"index.lifecycle.rollover_alias": "dnslog"  保持一致.

 

当索引增长超过50GB时,索引生命周期管理将创建一个新索引,并将别名翻转过来自动使用新索引。

比如创建 dnslog-000002 ,以此类推

 

注意: 我们往索引里写数据时,只需往索引别名dnslog 写入即可。

 

附录:索引模板添加映射类型

PUT _template/flow_template
{
  "index_patterns": ["te*", "bar*"],
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "_doc": {
      "_source": {
        "enabled": false
      },
      "properties": {
        "host_name": {
          "type": "keyword"
        },
        "created_at": {
          "type": "date",
          "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd"
        }
      }
    }
  }
}

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Elasticsearch滚动索引可以用来遍历大量数据,而不会导致内存溢出或超时。下面是Java代码实现滚动索引的步骤: 1.创建Elasticsearch客户端: ``` TransportClient client = new PreBuiltTransportClient(Settings.EMPTY) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); ``` 2.定义搜索条件: ``` SearchRequestBuilder searchRequestBuilder = client.prepareSearch("indexName") .setTypes("typeName") .setQuery(QueryBuilders.matchAllQuery()) .setSize(100) .setScroll(new TimeValue(60000)); ``` 这里设置了每次搜索返回100条记录,并且每次搜索的有效时间为60秒。 3.执行搜索: ``` SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); ``` 4.处理搜索结果: ``` while (true) { for (SearchHit searchHit : searchResponse.getHits().getHits()) { // 处理每个搜索结果 } searchResponse = client.prepareSearchScroll(searchResponse.getScrollId()) .setScroll(new TimeValue(60000)).execute().actionGet(); if (searchResponse.getHits().getHits().length == 0) { break; } } ``` 通过循环,我们可以遍历所有搜索结果。在每次循环结束后,我们需要使用`prepareSearchScroll`方法获取下一页搜索结果,直到没有更多结果为止。 5.关闭客户端: ``` client.close(); ``` 完整的Java代码示例: ``` TransportClient client = new PreBuiltTransportClient(Settings.EMPTY) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); SearchRequestBuilder searchRequestBuilder = client.prepareSearch("indexName") .setTypes("typeName") .setQuery(QueryBuilders.matchAllQuery()) .setSize(100) .setScroll(new TimeValue(60000)); SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); while (true) { for (SearchHit searchHit : searchResponse.getHits().getHits()) { // 处理每个搜索结果 } searchResponse = client.prepareSearchScroll(searchResponse.getScrollId()) .setScroll(new TimeValue(60000)).execute().actionGet(); if (searchResponse.getHits().getHits().length == 0) { break; } } client.close(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值