Java 操作 Elasticsearch(高级查询)

目录

第1关:常见基本查询

代码

第2关:组合查询(复合查询)

代码

第3关:聚合查询

代码


第1关:常见基本查询

任务描述
本关任务:查询出索引中需要指定要求的所有数据。

相关知识
为了完成本关任务,你需要掌握:
1.常见基本查询。

常见基本查询
1、match查询(模糊匹配)。
查询所有文档内容。

QueryBuilder builder = QueryBuilders.matchAllQuery();
匹配查询。

QueryBuilder builder = QueryBuilders.matchQuery("字段名","需要查询匹配的内容");
多字段匹配查询。

QueryBuilder builder = QueryBuilders.multiMatchQuery("需要查询匹配的内容","字段名","字段名",...);
案例:查询出字段stu_address中对象带有 湖南 的文档内容。

QueryBuilder builder = QueryBuilders.matchQuery("stu_address","湖南");
 SearchResponse sResponse = client.prepareSearch("blog").setQuery(builder).get();
SearchHits hits = sResponse.getHits();
for(SearchHit hit:hits) {
    //打印内容
    System.out.println(hit.getSourceAsString());
}
结果返回:

{"stu_name":"李四","stu_address":"湖南长沙"}
{"stu_name":"张四","stu_address":"湖南湘潭"}
2、term查询和terms查询(精准查询)。
term查询——单字段精准查询对象。

QueryBuilder builder = QueryBuilders.termQuery("字段名","需要查询匹配的内容");
terms查询——单字段查询多个对象。

  QueryBuilder builder = QueryBuilders.termsQuery("字段名","需要查询匹配的内容","需要查询匹配的内容",...);
案例:查询出年龄为18岁和19岁的用户。

QueryBuilder builder = QueryBuilders.termsQuery("age","18","19");
 SearchResponse sResponse = client.prepareSearch("blog2").setQuery(builder).get();
for(SearchHit hit:hits) {
    //打印内容
    System.out.println(hit.getSourceAsString());
}
结果返回:

{"first_name":"欣儿","last_name":"xin","age":19,"date":"2020-02-03"}
{"first_name":"五","last_name":"wang","age":19,"date":"2018-02-03"}
3、Query查询。
范围区间查询。

lt小于
lte小于等于
gt大于
gte大于等于
from().to()范围区间
QueryBuilder builder = QueryBuilders.rangeQuery("字段名").from("区间左边").to("区间右边");
前缀匹配查询。
QueryBuilder builder = QueryBuilders.prefixQuery("字段名", "前缀字符");
通配符查询。
如若前缀模糊查询就只需要匹配的内容*,后缀模糊查询*匹配的内容。

 QueryBuilder builder = QueryBuilders.wildcardQuery("字段名", "*匹配的内容*");
ID查询。

QueryBuilder builder = QueryBuilders.idsQuery().addIds("ID名","ID名",...);
字符精准查询(只查找出text格式的字段)。

QueryBuilder builder =QueryBuilders.commonTermsQuery("字段名","匹配的内容");
对象条件查询。
queryStringQuery,+表示需要,-表示不需要(条件必须同时满足相当于且)。

QueryBuilder builder =QueryBuilders.queryStringQuery("+需要匹配的内容 -不需要匹配的内容");
simpleQueryStringQuery,+表示需要,-表示不需要(条件不需要同时满足相当于或)。

QueryBuilder builder =QueryBuilders.simpleQueryStringQuery("+需要匹配的内容 -不需要匹配的内容");
案例:查找出2018-02-03注册或者不是18岁的用户。

QueryBuilder builder =QueryBuilders.simpleQueryStringQuery("+2018-02-03 -20");
SearchResponse sResponse = client.prepareSearch("blog2").setQuery(builder).get();
for(SearchHit hit:hits) {
    //打印内容
    System.out.println(hit.getSourceAsString());
}
结果返回:

{"first_name":"五","last_name":"wang","age":19,"date":"2018-02-03"}
{"first_name":"六","last_name":"wang","age":18,"date":"2018-02-03"}
4、过滤查询。
以前过滤查询 filteredQuery 也可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小柒_02

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

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

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

打赏作者

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

抵扣说明:

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

余额充值