【elasticsearch系列】javaApi高级查询

全匹配查询
// 创建客户端
RestHighLevelClient esClient=new RestHighLevelClient(
  RestClient.builder(new HttpHost("localhost",9200,"http"))
);
// 创建查询对象
SearchRequest request=new SearchRequest();
// 设置索引
request.indices("user");
// 设置查询条件
request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
// 打印命中条数
System.out.println(hits.getTotalHits());
for(SearchHit hit: hits){
  // 打印每一项
  System.out.println(hit.getSourceAsString());
}
// 关闭客户端
esClient.close();
结果
7 hits
{"name":"张三","age":18,"sex":"女"}
{"name":"zhangsan","age":20,"sex":"男"}
{"name":"lisi","age":50,"sex":"女"}
{"name":"zhangsan1","age":30,"sex":"男"}
{"name":"lisi1","age":40,"sex":"男"}
{"name":"zhangsan2","age":40,"sex":"女"}
{"name":"lisi2","age":18,"sex":"男"}
条件查询
// 创建客户端
RestHighLevelClient esClient=new RestHighLevelClient(
  RestClient.builder(new HttpHost("47.94.217.248",9200,"http"))
);
// 创建查询对象
SearchRequest request=new SearchRequest();
// 设置索引
request.indices("user");
// 设置查询条件
// 查询年龄等于30的
request.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("age",30)));
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
// 打印命中条数
System.out.println(hits.getTotalHits());
for(SearchHit hit: hits){
  // 打印每一项
  System.out.println(hit.getSourceAsString());
}
// 关闭客户端
esClient.close();
分页查询
// 创建客户端
RestHighLevelClient esClient=new RestHighLevelClient(
  RestClient.builder(new HttpHost("localhost",9200,"http"))
);
// 创建查询对象
SearchRequest request=new SearchRequest();
// 设置索引
request.indices("user");
// 设置查询条件
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
// 设置分页条件
// (当前页码-1)*每页显示数据条数
builder.from(0);
builder.size(2);
request.source(builder);
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
// 打印命中条数
System.out.println(hits.getTotalHits());
for(SearchHit hit: hits){
  // 打印每一项
  System.out.println(hit.getSourceAsString());
}
// 关闭客户端
esClient.close();
结果
7 hits
{"name":"张三","age":18,"sex":"女"}
{"name":"zhangsan","age":20,"sex":"男"}
过滤字段
// 创建客户端
RestHighLevelClient esClient=new RestHighLevelClient(
  RestClient.builder(new HttpHost("localhost",9200,"http"))
);
// 创建查询对象
SearchRequest request=new SearchRequest();
// 设置索引
request.indices("user");
// 设置查询条件
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
// 设置过滤条件
// 只查询包含name 的文档内容
String[] exclude={};// 可以指定排除字段
String[] include={"name"};
builder.fetchSource(include,exclude);
request.source(builder);
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
// 打印命中条数
System.out.println(hits.getTotalHits());
for(SearchHit hit: hits){
  // 打印每一项
  System.out.println(hit.getSourceAsString());
}
// 关闭客户端
esClient.close();
结果
7 hits
{"name":"张三"}
{"name":"zhangsan"}
{"name":"lisi"}
{"name":"zhangsan1"}
{"name":"lisi1"}
{"name":"zhangsan2"}
{"name":"lisi2"}
组合查询
//组合查询
// 创建客户端
RestHighLevelClient esClient=new RestHighLevelClient(
  RestClient.builder(new HttpHost("localhost",9200,"http"))
);
// 创建查询对象
SearchRequest request=new SearchRequest();
// 设置索引
request.indices("user");
// 设置组合查询条件
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.matchQuery("sex","男"));
boolQueryBuilder.must(QueryBuilders.matchQuery("age",30));
// 查询年龄30或者40的
//boolQueryBuilder.should(QueryBuilders.matchQuery("age",30));
//boolQueryBuilder.should(QueryBuilders.matchQuery("age",40));
builder.query(boolQueryBuilder);
request.source(builder);
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
// 打印命中条数
System.out.println(hits.getTotalHits());
for(SearchHit hit: hits){
  // 打印每一项
  System.out.println(hit.getSourceAsString());
}
// 关闭客户端
esClient.close();
查询结果
1 hits
{"name":"zhangsan1","age":30,"sex":"男"}
范围查询
//范围查询
// 创建客户端
RestHighLevelClient esClient=new RestHighLevelClient(
  RestClient.builder(new HttpHost("47.94.217.248",9200,"http"))
);
// 创建查询对象
SearchRequest request=new SearchRequest();
// 设置索引
request.indices("user");
// 设置范围查询条件
SearchSourceBuilder builder = new SearchSourceBuilder();
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age");
// 30=<年龄<=40
rangeQuery.gte(30); //gt: 大于
rangeQuery.lte(40); //lt: 小于
builder.query(rangeQuery);
request.source(builder);
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
// 打印命中条数
System.out.println(hits.getTotalHits());
for(SearchHit hit: hits){
  // 打印每一项
  System.out.println(hit.getSourceAsString());
}
// 关闭客户端
esClient.close();
结果
3 hits
{"name":"zhangsan1","age":30,"sex":"男"}
{"name":"lisi1","age":40,"sex":"男"}
{"name":"zhangsan2","age":40,"sex":"女"}
模糊查询
//模糊查询
// 创建客户端
RestHighLevelClient esClient=new RestHighLevelClient(
  RestClient.builder(new HttpHost("47.94.217.248",9200,"http"))
);
// 创建查询对象
SearchRequest request=new SearchRequest();
// 设置索引
request.indices("user");
// 设置模糊查询条件
SearchSourceBuilder builder = new SearchSourceBuilder();
// 模糊查询name=zhangsan的文档,允许差一位
builder.query(QueryBuilders.fuzzyQuery("name","zhangsan").fuzziness(Fuzziness.ONE));
request.source(builder);
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
// 打印命中条数
System.out.println(hits.getTotalHits());
for(SearchHit hit: hits){
  // 打印每一项
  System.out.println(hit.getSourceAsString());
}
// 关闭客户端
esClient.close();
结果
3 hits
{"name":"zhangsan","age":20,"sex":"男"}
{"name":"zhangsan1","age":30,"sex":"男"}
{"name":"zhangsan2","age":40,"sex":"女"}
高亮查询
//高亮查询
// 创建客户端
RestHighLevelClient esClient=new RestHighLevelClient(
  RestClient.builder(new HttpHost("47.94.217.248",9200,"http"))
);
// 创建查询对象
SearchRequest request=new SearchRequest();
// 设置索引
request.indices("user");
// 设置查询条件
SearchSourceBuilder builder = new SearchSourceBuilder();
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "zhangsan");
builder.query(termQueryBuilder);
// 设置高亮格式
HighlightBuilder highlightBuilder=new HighlightBuilder();
highlightBuilder.preTags("<font color='red'>");
highlightBuilder.postTags("</font>");
// 设置高亮字段
highlightBuilder.field("name");
builder.highlighter(highlightBuilder);
request.source(builder);
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
// 打印命中条数
System.out.println(hits.getTotalHits());
for(SearchHit hit: hits){
  // 打印每一项
  System.out.println(hit.getSourceAsString());
}
// 关闭客户端
esClient.close();
查询结果
{
    "took":2,
    "timed_out":false,
    "_shards":{
        "total":1,
        "successful":1,
        "skipped":0,
        "failed":0
    },
    "hits":{
        "total":{
            "value":1,
            "relation":"eq"
        },
        "max_score":1.7641908,
        "hits":[
            {
                "_index":"user",
                "_type":"_doc",
                "_id":"1002",
                "_score":1.7641908,
                "_source":{
                    "name":"zhangsan",
                    "age":20,
                    "sex":"[0xffffffe7][0xffffff94][0xffffffb7]"
                },
                "highlight":{
                    "name":[
                        "<font color='red'>zhangsan</font>"
                    ]
                }
            }
        ]
    }
}
聚合查询
最大年龄
// 创建客户端
RestHighLevelClient esClient=new RestHighLevelClient(
  RestClient.builder(new HttpHost("47.94.217.248",9200,"http"))
);
// 创建查询对象
SearchRequest request=new SearchRequest();
// 设置索引
request.indices("user");
// 设置查询条件
SearchSourceBuilder builder = new SearchSourceBuilder();
AggregationBuilder aggregationBuilder = AggregationBuilders.max("maxAge").field("age");
builder.aggregation(aggregationBuilder);
request.source(builder);
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
// 打印命中条数
System.out.println(hits.getTotalHits());
for(SearchHit hit: hits){
  // 打印每一项
  System.out.println(hit.getSourceAsString());
}
// 关闭客户端
esClient.close();
结果
{
    "took":2,
    "timed_out":false,
    "_shards":{
        "total":1,
        "successful":1,
        "skipped":0,
        "failed":0
    },
    "hits":{
        "total":{
            "value":7,
            "relation":"eq"
        },
        "max_score":1,
        "hits":[
            {
                "_index":"user",
                "_type":"_doc",
                "_id":"1001",
                "_score":1,
                "_source":{
                    "name":"[0xffffffe5][0xffffffbc][0xffffffa0][0xffffffe4][0xffffffb8][0xffffff89]",
                    "age":18,
                    "sex":"[0xffffffe5][0xffffffa5][0xffffffb3]"
                }
            },
            {
                "_index":"user",
                "_type":"_doc",
                "_id":"1002",
                "_score":1,
                "_source":{
                    "name":"zhangsan",
                    "age":20,
                    "sex":"[0xffffffe7][0xffffff94][0xffffffb7]"
                }
            },
            {
                "_index":"user",
                "_type":"_doc",
                "_id":"1003",
                "_score":1,
                "_source":{
                    "name":"lisi",
                    "age":50,
                    "sex":"[0xffffffe5][0xffffffa5][0xffffffb3]"
                }
            },
            {
                "_index":"user",
                "_type":"_doc",
                "_id":"1004",
                "_score":1,
                "_source":{
                    "name":"zhangsan1",
                    "age":30,
                    "sex":"[0xffffffe7][0xffffff94][0xffffffb7]"
                }
            },
            {
                "_index":"user",
                "_type":"_doc",
                "_id":"1005",
                "_score":1,
                "_source":{
                    "name":"lisi1",
                    "age":40,
                    "sex":"[0xffffffe7][0xffffff94][0xffffffb7]"
                }
            },
            {
                "_index":"user",
                "_type":"_doc",
                "_id":"1006",
                "_score":1,
                "_source":{
                    "name":"zhangsan2",
                    "age":40,
                    "sex":"[0xffffffe5][0xffffffa5][0xffffffb3]"
                }
            },
            {
                "_index":"user",
                "_type":"_doc",
                "_id":"1007",
                "_score":1,
                "_source":{
                    "name":"lisi2",
                    "age":18,
                    "sex":"[0xffffffe7][0xffffff94][0xffffffb7]"
                }
            }
        ]
    },
    "aggregations":{
        "max#maxAge":{
            "value":50
        }
    }
}
分组聚合查询
// 分组查询
// 创建客户端
RestHighLevelClient esClient=new RestHighLevelClient(
  RestClient.builder(new HttpHost("47.94.217.248",9200,"http"))
);
// 创建查询对象
SearchRequest request=new SearchRequest();
// 设置索引
request.indices("user");
// 设置查询条件
SearchSourceBuilder builder = new SearchSourceBuilder();
// 对age进行分组查询
AggregationBuilder aggregationBuilder = AggregationBuilders.terms("ageGroups").field("age");
builder.aggregation(aggregationBuilder);
request.source(builder);
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
// 打印命中条数
System.out.println(hits.getTotalHits());
for(SearchHit hit: hits){
  // 打印每一项
  System.out.println(hit.getSourceAsString());
}
// 关闭客户端
esClient.close();
结果
{
    "took":1,
    "timed_out":false,
    "_shards":{
        "total":1,
        "successful":1,
        "skipped":0,
        "failed":0
    },
    "hits":{
        "total":{
            "value":7,
            "relation":"eq"
        },
        "max_score":1,
        "hits":[
            {
                "_index":"user",
                "_type":"_doc",
                "_id":"1001",
                "_score":1,
                "_source":{
                    "name":"[0xffffffe5][0xffffffbc][0xffffffa0][0xffffffe4][0xffffffb8][0xffffff89]",
                    "age":18,
                    "sex":"[0xffffffe5][0xffffffa5][0xffffffb3]"
                }
            },
            {
                "_index":"user",
                "_type":"_doc",
                "_id":"1002",
                "_score":1,
                "_source":{
                    "name":"zhangsan",
                    "age":20,
                    "sex":"[0xffffffe7][0xffffff94][0xffffffb7]"
                }
            },
            {
                "_index":"user",
                "_type":"_doc",
                "_id":"1003",
                "_score":1,
                "_source":{
                    "name":"lisi",
                    "age":50,
                    "sex":"[0xffffffe5][0xffffffa5][0xffffffb3]"
                }
            },
            {
                "_index":"user",
                "_type":"_doc",
                "_id":"1004",
                "_score":1,
                "_source":{
                    "name":"zhangsan1",
                    "age":30,
                    "sex":"[0xffffffe7][0xffffff94][0xffffffb7]"
                }
            },
            {
                "_index":"user",
                "_type":"_doc",
                "_id":"1005",
                "_score":1,
                "_source":{
                    "name":"lisi1",
                    "age":40,
                    "sex":"[0xffffffe7][0xffffff94][0xffffffb7]"
                }
            },
            {
                "_index":"user",
                "_type":"_doc",
                "_id":"1006",
                "_score":1,
                "_source":{
                    "name":"zhangsan2",
                    "age":40,
                    "sex":"[0xffffffe5][0xffffffa5][0xffffffb3]"
                }
            },
            {
                "_index":"user",
                "_type":"_doc",
                "_id":"1007",
                "_score":1,
                "_source":{
                    "name":"lisi2",
                    "age":18,
                    "sex":"[0xffffffe7][0xffffff94][0xffffffb7]"
                }
            }
        ]
    },
    "aggregations":{
        "lterms#ageGroups":{
            "doc_count_error_upper_bound":0,
            "sum_other_doc_count":0,
            "buckets":[
                {
                    "key":18,
                    "doc_count":2
                },
                {
                    "key":40,
                    "doc_count":2
                },
                {
                    "key":20,
                    "doc_count":1
                },
                {
                    "key":30,
                    "doc_count":1
                },
                {
                    "key":50,
                    "doc_count":1
                }
            ]
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LLLDa_&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值