- 分组查询
- 索引操作
- 创建索引 & 字段映射
- 删除索引
- 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"}



