1、创建index
PUT /my_index
{
"settings":{
"number_of_shards":1,
"number_of_replicas":1
},
"mappings":{
"properties":{
"trans_count":{"type":"long"},
"trans_amount":{"type":"long"},
"trans_date":{"type":"long"},
"team_field":{"type":"keyword"}
}
}
}
2、新增记录
POST my_index/_doc
{
"trans_count": 123,
"trans_amount": 123,
"trans_date": 20200202,
"team_field": "1"
}
3、修改记录
POST my_index1/_doc/id/_update
{
"doc": {
"cust_count": 14,
"ret_code":"00000000"
}
}
4、查询
GET my_index3/_search
{
"query": {
"match_all": {}
},
"aggs": {
"group_by_place": {
"terms": {"field": "success_name"}, //先根据success_name分组
"aggs" : {
"sum_price" : {
"sum": { "field": "trans_count" } //每一组再根据trans_count求和
}
}
}
}
}
5、java操作es查询
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.aggregations.metrics.Sum;
import org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
public class Test {
public static void main(String[] args) throws Exception {
// 1、通过QueryBuilders构造QueryBuilder,即查询条件
QueryBuilder queryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.termQuery("trans_date", "20200202"));
// 2、构造聚合查询
// 分组
TermsAggregationBuilder field = AggregationBuilders.terms("group_name").field("success_name");
// 求和
SumAggregationBuilder sumAggr = AggregationBuilders.sum("my_sum").field("trans_count");
field.subAggregation(sumAggr);
// 3、通过index构造SearchRequest
SearchRequest searchRequest = new SearchRequest("ectm_phone_trans_msg_index-2020.02.02");
// 4、新建SearchSourceBuilder
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 5、SearchSourceBuilder添加查询条件,添加聚合条件
searchSourceBuilder.query(queryBuilder);
searchSourceBuilder.aggregation(field);
searchSourceBuilder.size(10);
// 6、SearchSourceBuilder添加到SearchRequest中
searchRequest.source(searchSourceBuilder);
// 7、获取客户端
RestHighLevelClient client = getClient();
// 8、使用客户端执行查询,获取SearchResponse
SearchResponse res = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(res);
//获取记录
for (SearchHit hit : res.getHits()) {
System.out.println(hit.getSourceAsMap());
}
//获取聚合结果
Terms aggregation = res.getAggregations().get("group_name");
for (Bucket bucket : aggregation.getBuckets()) {
Sum sum = bucket.getAggregations().get("my_sum");
System.out.println(sum.getValue());;
}
client.close();
}
public static RestHighLevelClient getClient() {
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("elastic", "123456"));
RestClientBuilder builder = null;
builder = RestClient.builder(
new HttpHost("10.10.49.78" , 9200 ))
.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(
HttpAsyncClientBuilder httpClientBuilder) {
return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
});
return new RestHighLevelClient(builder);
}
}
6、一点文章引用-个人觉得还不错的入门
https://tool.lu/deck/h3/detail -- 性能与稳定并存 Elasticsearch调优实践
7、聚合之Cardinality
Cardinality,基于基数聚合,能实现去重计数的功能,可以通过precision_threshold指定基数精度,但是其精度最大为40000,当去重后统计数量大于基数精度,会出现计数不准确问题。如下图所示:


浙公网安备 33010602011771号