ES Query DSL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES Query DSL相关的知识,希望对你有一定的参考价值。

参考技术A Query DSL

Elasticsearch提供了一个可以执行查询的Json风格的DSL。这个被称为Query DSL,该查询语言非常全面。

match_all查询类型【代表查询所有的所有】,es中可以在query中组合非常多的查询类型完成复杂查询;
除了query参数之外,我们可也传递其他的参数以改变查询结果,如sort,size;
from+size限定,完成分页功能;
sort排序,多字段排序,会在前序字段相等时后续字段内部排序,否则以前序为准;
返回部分字段

查询结果:

match精确匹配非字符串
match匹配非字符串,就是精确查询

match返回account_number=995的数据。

查询结果:

查询字符串是模糊查询,全文检索。

查询包含kings的结果。
查询结果

全文检索,按照得分进行排序,会对检索条件进行分词匹配。

将条件当成短语不进行分词。
查询结果

对mill road进行分词,在state和address字段中查询
查询结果

复合语句可以合并,任何其他查询语句,包括符合语句。这也就意味着,复合语句之间可以互相嵌套,可以表达非常复杂的逻辑。

必须同时满足两个条件,"address":"mill"和"gender":"M",其实依旧是模糊匹配

如果匹配条件只有should那么就会变成模糊查询

查询address包含mill的结果,和match匹配一致

对比match查询结果发现完成一致

filter过滤,不进行相关得分计算。

匹配balance>=10000,<=20000的区间

所有得分都是 0.0
和其他查询条件一起查询

filter对最终的结果进行匹配,对must,should匹配的结果进行过滤

多条件查询时候,就算用了filter依旧会计算得分。

和match一样。匹配某个属性的值。全文检索字段用match,其他非text字段匹配用term。

结果

如果term匹配文本则一条都匹配不到。

聚合提供了从数据中分组和提取数据的能力。最简单的聚合方法大致等于SQL Group by和SQL聚合函数。在elasticsearch中,执行搜索返回this(命中结果),并且同时返回聚合结果,把以响应中的所有hits(命中结果)分隔开的能力。这是非常强大且有效的,你可以执行查询和多个聚合,并且在一次使用中得到各自的(任何一个的)返回结果,使用一次简洁和简化的API啦避免网络往返。
对数据进行分析。
语法结构

case

结果

结果

查询结果

查询结果

查询结果

以上是关于ES Query DSL的主要内容,如果未能解决你的问题,请参考以下文章

ES Query DSL

es xxx_by_query

ES 23 - 检索和过滤的区别 (query vs. filter)

ES(elasticsearch) query DSL 查询语法

ES query_string match的区别之一

es修正query