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

ES构建queryBuilder条件查询

ES构建queryBuilder条件查询

对于不熟练的同学来说在构建Java代码查询之前一定要先将DSL查询语句,这样方便构造。

首先说一下bool查询的几种逻辑关系(子查询的组合方式):

must:必须匹配每个子查询,与Java的“与”相似

should:选择性的匹配子查询,与Java的“或”相似

must_not:必须不匹配,(不参与算分)与Java的“非”相似

filter:必须匹配,(不参与算分)用来匹配自主的过滤条件

查询的基本步骤是:

1、创建SearchRequest对象

2、准备Request.source(),也就是DSL:①QueryBuilders来构建查询条件②传入Request.source()的query()方法

3、发送请求,得到结果

4、解析结果(参考DSL查询的JSON结果,从外到内,逐层解析)

全文检索的match和multi_match查询与match_all的API基本一直。差别是查询条件,也就是query的部分。同样是利用QueryBuilders提供的方法:

QueryBuilders.matchQuery("all","如家");

QueryBuilders.multiMatchQuery("如家","name","business");

相对应的DSL语句:

GET /hotel/_search

{

        "query": {

                "match_all":{}

}

}

GET /hotel/_search

{

"query": {

"match": {

"all":"如家"

}

}

}

GET /hotel/_search

{

        "query": {

                "multi_match":{

                        "query": "如家",

                        "fields": ["brand","name"]

}

}

}

精确查询:精确查询常见的有term查询和range查询,同样利用QueryBuilders实现:

//词条查询

QueryBuilders.termQuery("city","杭州");

//范围查询

QueryBuilders.rangeQuery("price").gte(100).lte(150);

对应的DSL语句:

 复合查询:(这里也就是步骤的第二步)

//创建布尔查询

BoolQueryBuilders boolQuery = QueryBuilders.boolQuery();

//添加must条件

boolQuery.must(QueryBuilders.termQuery("city","杭州"));

//添加filter条件

boolQuery.filter(QueryBuilders.rangeQuery("price").lte(250));

相对应的DSL语句:

在构建查询语句的时候只要记住QueryBuilders这一个类就OK了 。

所有搜索DSL的构建,记住一个API:SearchRequest的source()方法:

第一步:准备Request:SearchRequest request = new SearchRequest("索引库名")

第二步:准备DSL,准备BooleanQuery,构建查询语句(添加term,添加filter)

第三步:发送请求

request.source().query(boolquery);

SearchResponse response = client.search(request, RequestOptions.DEFAULT);

第四步:解析响应

【仅作记录】

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

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

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