栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

ElasticsearchRestTemplate 聚合查询+操作索引+查询时10000条上限

ElasticsearchRestTemplate 聚合查询+操作索引+查询时10000条上限

文章目录
    • 分组查询
    • 索引操作
        • 创建索引 & 字段映射
        • 删除索引
        • 10000条上限

分组查询
	private final ElasticsearchRestTemplate esRestTemplate;
	
	// select count(1), status from order group by status 
	public void aggregate(){
		// 查询条件
		NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder()
			.withQuery(
				QueryBuilders.rangeQuery("createTime")
					.format("yyyy-MM-dd HH:mm:ss")
					.gte("2021-08-17 00:00:00").lte("2021-08-18 00:00:00")
					.includeLower(true).includeUpper(true))
			// 分组查询status字段并as count
			.addAggregation(AggregationBuilders.terms("count").field("status"))	
			.withSourceFilter(new FetchSourceFilterBuilder().build())
			// 下面两行优化速度 去除查询结果 只取聚合查询的结果
			// withFields不给参数去掉dom的所有字段 & 分页只取1条
			.withFields()
			.withPageable(PageRequest.of(0, 1));

		String idx = "idx_order_dev";
		AggregatedPage results = esRestTemplate.queryForPage(queryBuilder.build(), EsOrder.class, IndexCoordinates.of(idx));
		Aggregations entitiesAggregations = results.getAggregations();
		Terms terms = (Terms) entitiesAggregations.asMap().get("count");
		
		// 遍历取出聚合字段列的值,与对应的数量
		for (Terms.Bucket bucket : terms.getBuckets()) {
			String key = bucket.getKeyAsString(); // 聚合字段列的值
			long val = bucket.getDocCount();// 聚合字段对应的数量
			System.out.printf("%s -> %sn", key, val);
		}
	
	}
索引操作

操作单条保存时 ElasticsearchRestTemplate比ElasticsearchRepository快
因为repository会在每次保存完时刷新索引

创建索引 & 字段映射
IndexCoordinates idx = IndexCoordinates.of("idx_order");
IndexOperations idxOps = esRestTemplate.indexOps(idx);
idxOps.create();
document mapping = idxOps.createMapping(EsOrder.class);
idxOps.putMapping(mapping);
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

@Data
@document(indexName = "idx_order_#{orderConfiguration.profile}", shards = 3, replicas = 2)
public class EsOrder extends EsOrderView implements Serializable {
	
	@Field(type = FieldType.Keyword)
	private String orderId;
	...
}

删除索引

等于drop table 数据全清除

IndexCoordinates idx = IndexCoordinates.of("idx_order_dev");
IndexOperations idxOps = esRestTemplate.indexOps(idx);
idxOps.delete();
10000条上限

query时默认上限是10000条 向ES服务器put一条设置即可修改该限制

PUT /_all/_settings?preserve_existing=true
{"index.max_result_window":"2000000000"}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/604344.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号