elasticsearch 索引 Warmer 管理
来源:互联网 发布:云计算现状 编辑:程序博客网 时间:2024/04/30 08:58
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-warmers.html#removing
为什么要使用Warmer呢,这要看自己的数据和查询等条件,但是基本上都是有用的。在es启动时并不会加载任何数据,在查询前。因此,在查询前把需要的数据预加载到缓存中和启动I/O缓存(通过读硬盘上的segment数据),通过这种方式,所有的需要的信息都已经放置在缓存中,就能保证我们的查询获得了优化和所有需要的数据都已经准备好了。最后,通过一个实例简单说明使用warmer在初始查询时与普通方式查询的差距(参考 Mastering Elasticsearch for java 书籍的197页)。
使用warmer允许我们对索引注册一些我们常用的查询或者统计请求在查询时间进行预热(缓存),随着查询实时性的高要求,冷数据(segments)可以查询之前预热起来。特别是一些针对某些字段的负载比较大的统计或者排序,通过warmer API可以创建、删除和获取warmer信息。
可以通过index.warmer.enabled设置为false来禁用该功能。禁用curl命令:
curl -XPUT 'localhost:9200/mastering/_settings' -d '{ "index.warmer.enabled": false}'
mastering为索引名
一、创建Warmer
/** * <pre> * 以上代码在创建时需要制定查询条件, * query还是filter,addFacet,addAggregation, * 等查询。制定warmer后,需要重启ES才能看到效果, * 查询条件需要与设置的warmer定义的一致才行。 * @param indexName 索引名 * @param indexType 索引类型 * @return * </pre> */public void createWarmer(String indexName, String indexType){ //创建Warmer//Puts an index search warmer to be applies when applicable. PutWarmerResponse response = getClient().admin().indices() //warmer定义名 .preparePutWarmer("warmerName") .setSearchRequest( //可以指定针对的索引和类型,类型不指定,则针对所有的类型 getClient().prepareSearch(indexName).setTypes(indexType) //按照tgsj字段分组统计//.addAggregation(AggregationBuilders.terms("tgsj").field("tgsj"))//.addSort("cteareTime", SortOrder.DESC) .setPostFilter(FilterBuilders.termFilter("conCity", "000060"))//.addFacet(FacetBuilders.termsFacet("tags").field("tags")) ).execute().actionGet(); System.out.println("操作是否成功:"+response.isAcknowledged());}
测试用例:
@Test// public void createWarmer() throws Exception { esutils.createWarmer("esfindex","esftype"); }
添加命令:
curl -XPUT localhost:9200/test/type1/_warmer/warmer_1 -d '{"query" : { "match_all" : {}},"aggs" : { "aggs_1" : { "terms" : { "field" : "field" } } }}'
test为索引名,type1为索引类型,warmer_1为warmer名;
二、查询Warmer
Java API方式:/** * 获取Warmer信息 * @param indexName * @param indexType */public void getWarmer(String indexName, String indexType){ GetWarmersResponse response = getClient().admin().indices() .prepareGetWarmers(indexName).addTypes(indexType).get(); ImmutableOpenMap<String, ImmutableList<IndexWarmersMetaData.Entry>> map = response.getWarmers(); Iterator<ObjectObjectCursor<String, ImmutableList<IndexWarmersMetaData.Entry>>> itor = map.iterator(); while(itor.hasNext()){ ObjectObjectCursor<String, ImmutableList<IndexWarmersMetaData.Entry>> enCursor = itor.next(); System.out.println(enCursor.key);//索引名 ImmutableList<IndexWarmersMetaData.Entry> id = enCursor.value; Iterator<IndexWarmersMetaData.Entry> ir = id.iterator(); while(ir.hasNext()){ IndexWarmersMetaData.Entry ieEntry = ir.next(); System.out.println(ieEntry.name());//warmer名 System.out.println(FastJSONHelper.serialize(ieEntry)); } }}
命令:curl -XGET localhost:9200/esfindex/_warmer/warmerName?pretty
esfindex为索引名,支持通配符,如
curl -XGET localhost:9200/test/_warmer/warm*;
命令获取结果:
三、删除Warmer
Curl命令:
curl -DELETE HTTP://localhost:9200/esfindex/_warmer/warmerName
esfindex为索引名,warmerName为warmer名
Java api
/** * 删除指定索引的warmer * @param indexName 索引名 * @param warmerName warmer名 */public void deleteWarmer(String indexName, String warmerName){ //删除Warmer DeleteWarmerResponse response = getClient().admin().indices() .prepareDeleteWarmer() //索引名 .setIndices(indexName) //warmer名 .setNames(warmerName) .execute().actionGet(); System.out.println("操作是否成功:"+response.isAcknowledged());}
测试用例:
@Test// public void deleteWarmer() throws Exception { esutils.deleteWarmer("esfindex","warmerName");}
- elasticsearch 索引 Warmer 管理
- [Elasticsearch] 索引管理 (一)
- [Elasticsearch] 索引管理 (二)
- [Elasticsearch] 索引管理
- Elasticsearch索引管理
- elasticsearch索引管理
- ElasticSearch(十)-索引管理
- Elasticsearch索引管理-reindex重建索引
- [Elasticsearch] 索引管理 (五) - 默认映射,重索引,索引别名
- [Elasticsearch] 索引管理 (五) - 默认映射,重索引,索引别名
- [Elasticsearch] 索引管理 (四) - 动态映射
- [ElasticSearch]Java API 之 索引管理
- (四)elasticsearch 5x 索引管理
- ElasticSearch核心基础之索引管理
- Elasticsearch索引。
- [Elasticsearch] 索引管理 (三) - 根对象(Root Object)
- ElasticSearch初步学习,管理索引(入门二)
- elasticsearch索引修复
- J2EE实验5:JDBC应用
- MyEclipse 2015优化技巧
- 在北京黑马学习Java01
- SSH面试常考题(6)
- 通过Android trace文件分析死锁ANR
- elasticsearch 索引 Warmer 管理
- 关于C语言0x01
- iOS 本地数据持久化
- Arrays.ArrayList 固定长度的List集合
- Codeforces Round #299
- K-Means++的代码
- linux时间函数总结
- Spring constructor-arg、c、p
- ValueError: urls must start with a leading slash