(七)ElasticSearch高级查询语法

一 子条件查询:特定字段查询所指特定值。分为:Query context和Filter context

1 Query context

概念:在查询中,除了判断文档是否满足查询条件外,ES还会计算一个_score来标识匹配的程度,旨在判断目标文档和查询条件匹配有多好;常用的查询有:全文本查询-针对文本类型数据。字段级别查询-针对结构化数据,如数字、日期等。

1-1全文本查询:分类-模糊匹配(关键词match)、习语匹配(match_phrase)、多字段匹配(multi_match)、语法查询

1) 模糊查询:

ES查询某个字段不为空的数据 es查询字段长度大于的_字段

模糊查询结果:

ES查询某个字段不为空的数据 es查询字段长度大于的_ES查询某个字段不为空的数据_02

2) 习语查询:

ES查询某个字段不为空的数据 es查询字段长度大于的_条件查询_03


习语查询结果:

ES查询某个字段不为空的数据 es查询字段长度大于的_ES查询某个字段不为空的数据_04

3) 多字段查询:

ES查询某个字段不为空的数据 es查询字段长度大于的_字段_05


多字段查询结果:

ES查询某个字段不为空的数据 es查询字段长度大于的_字段_06

4) 语法查询:根据一定的语法规则进行的查询。支持通配符、范围查询、布尔查询、正则表达式等

ES查询某个字段不为空的数据 es查询字段长度大于的_数据_07

结果:

ES查询某个字段不为空的数据 es查询字段长度大于的_条件查询_08


ES查询某个字段不为空的数据 es查询字段长度大于的_数据_09

结果:

ES查询某个字段不为空的数据 es查询字段长度大于的_条件查询_10


1-2字段查询

1) 查询特定项:

ES查询某个字段不为空的数据 es查询字段长度大于的_条件查询_11

查询特定项结果:

ES查询某个字段不为空的数据 es查询字段长度大于的_字段_12

2) 范围查询:

ES查询某个字段不为空的数据 es查询字段长度大于的_ES查询某个字段不为空的数据_13


范围查询结果:

ES查询某个字段不为空的数据 es查询字段长度大于的_ES查询某个字段不为空的数据_14


3) 日期范围查询:

ES查询某个字段不为空的数据 es查询字段长度大于的_数据_15


日期范围查询结果:

ES查询某个字段不为空的数据 es查询字段长度大于的_条件查询_16


2 Filter context

概念:以一定的逻辑组合子条件查询。在查询过程中,只判断该文档是否满足条件,只有YES或者NO。做数据过滤,ES会对其结果进行缓存,所以相对Query快一些。要结合布尔(bool)使用。

ES查询某个字段不为空的数据 es查询字段长度大于的_数据_17


结果:

ES查询某个字段不为空的数据 es查询字段长度大于的_条件查询_18

二 复合条件查询:主要介绍固定分数查询(将查询的评估固定下来,不支持match,只支持filter)、布尔查询

1 固定分数查询

1 )不指定分数,ES估算匹配度,计算分数,默认从大到小排序

ES查询某个字段不为空的数据 es查询字段长度大于的_数据_19

结果:

ES查询某个字段不为空的数据 es查询字段长度大于的_ES查询某个字段不为空的数据_20

2) 固定分数

ES查询某个字段不为空的数据 es查询字段长度大于的_条件查询_21


结果:

ES查询某个字段不为空的数据 es查询字段长度大于的_ES查询某个字段不为空的数据_22


3) 直接指定分数

ES查询某个字段不为空的数据 es查询字段长度大于的_字段_23

结果:

ES查询某个字段不为空的数据 es查询字段长度大于的_条件查询_24

2 布尔查询

1) should-或的关系,满足一个条件即可

ES查询某个字段不为空的数据 es查询字段长度大于的_字段_25

结果:

ES查询某个字段不为空的数据 es查询字段长度大于的_数据_26


2) must的使用,必须满足所有条件

ES查询某个字段不为空的数据 es查询字段长度大于的_条件查询_27

结果:

ES查询某个字段不为空的数据 es查询字段长度大于的_数据_28


3)must与filter组合,由于我的数据没有满足条件的结果,预测查询结果为null

ES查询某个字段不为空的数据 es查询字段长度大于的_数据_29


结果:

ES查询某个字段不为空的数据 es查询字段长度大于的_ES查询某个字段不为空的数据_30

4) must对立关键词,表示必须不能满足该条件

ES查询某个字段不为空的数据 es查询字段长度大于的_ES查询某个字段不为空的数据_31


结果:

ES查询某个字段不为空的数据 es查询字段长度大于的_ES查询某个字段不为空的数据_32