复合查询会将其他的复合查询或者叶查询包裹起来,以嵌套的形式展示和执行,得到的结果也是对各个子查询结果和分数的合并。可以分为下面几种:
constant_score query
经常用在使用 filter 的场合,所有匹配的文档分数都是一个不变的常量
bool query
可以将多个叶查询和组合查询再组合起来,可接受的参数如下
must : 文档必须匹配这些条件才能被包含进来
must_not 文档必须不匹配才能被包含进来
should 如果满足其中的任何语句,都会增加分数;即使不满足,也没有影响
filter 以过滤模式进行,不评分,但是必须匹配
dis_max query
叫做分离最大化查询,它会将任何与查询匹配的文档都作为结果返回,但是只是将其中最佳匹配的评分作为最终的评分返回。
function_score query
允许为每个与主查询匹配的文档应用一个函数,可用来改变甚至替换原始的评分
boosting query
用来控制(提高或降低)复合查询中子查询的权重。
复合查询列表 Search Query QueryBuilder Class Method in QueryBuildersConstant Score ConstantScoreQueryBuilder
Bool BoolQueryBuilder
Dis Max DisMaxQueryBuilder
Function Score FunctionScoreQueryBuilder
Boosting BoostingQueryBuilder
特殊查询 Wrapper Query
这里比较重要的一个是 Wrapper Query,是说可以接受任何其他 base64 编码的字符串作为子查询。
主要应用场合就是在 Rest High-Level REST client 中接受 json 字符串作为参数。比如使用 gson 等 json 库将要查询的语句拼接好,直接塞到 Wrapper Query 中查询就可以了,非常方便。
Wrapper Query 对应的 QueryBuilder class 是WrapperQueryBuilder
具体方法是
小结本文对 elasticsearch rest high client 中的查询构建进行了总结和整理,对常用的 API 做了简要的介绍。读者如果要查看完整的构建查询的 API 列表,可参考此处
参考文档 系列文章列表Elasticsearch Java Rest Client API 整理总结 (一)——Document API
Elasticsearch Java Rest Client API 整理总结 (二) —— SearchAPI
Elasticsearch Java Rest Client API 整理总结 (三)——Building Queries