对于不熟练的同学来说在构建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":{}