Elastic Stack学习笔记4-Search API

1.概览

  • 实现对es中存储的数据进行查询分析,endpoint为_search,如下示例:

  • 查询主要有两种形式

  • URI Search

  • 操作简便,方便通过命令行测试。

  • 仅包含部分查询语法

  • Request Body Search

  • es提供完备的查询语法Query DSL(Domain Specific Language)

2.URI Search 详解

  • 通过url query参数来实现搜索,常用参数如下:

  • q指定查询语句,语法为Query String Syntax。

  • df(default field) q中不指定字段,默认查询所有字段。

  • sort排序。

  • timeout指定超时时间,默认不超时。

  • from,size用于分页。

  • Query String Syntax

  • term(单词) 和 phrase(词语)

  • alfred way 等效于 alfred or way。

  • "alfred way" 词语查询,需要用""包裹。

  • 泛查询

  • alfred 等效于在所有字段去批评term。

  • 指定字段

  • name:alfred。

  • Group 分组设定,使用括号指定匹配的规则

  • (quick or brown)and fox

  • 指定匹配的优先级,必须先满足(quick or brown)这个条件,在满足fox这个条件。

  • status:(active or pending) title:(full text search)

  • 查询status是active 或者 pending。如果去掉,语意就会变为status是active或者所有字段中包含pending的结果。

  • 查询title中包含full或者text或者search的所有文档,如果去掉,语意就会变为查询title是full或者所有字段中包含text or search的文档。

  • 布尔操作符

  • AND(&&),OR(||),NOT(!)

  • name:(tom NOT lee),语意,name中不包含lee,包含tom的所有文档。

  • AND、OR、NOT一定得大些,不能小写。

  • + - 分别对应的是must和must not

  • name:(tom +lee -alfred)语意,一定有lee,一定没有alfred,可以包含tom的所有文档。

  • + 在url中会被解析为空格,要使用encode后的结果才可以,为%2B。

  • 范围查询,支持数值和日期

  • 区间写法,闭区间[],开区间{}。

  • age:[1 TO 10],意为1<=age<=10。

  • age:[1 TO 10},意为1<=age<10。

  • age:[1 TO ],意为age>=1。

  • age:[* TO 10],意为age<=10。

  • 算数符合写法

  • age:>=1。

  • age:(>=1 && <=10) 或者(+>=1 +<=10)

  • 通配符查询

  • ? 代表一个字符,* 代表0个或多个字符。

  • name:t?m。

  • name:tom*。

  • name:t*m。

  • 通配符匹配执行效率低,占用较多内存,不建议使用。

  • 如无特殊需求,不将?/*放在最前面。

  • 正则表达式

  • name:/[mb]oat/

  • 模糊匹配查询

  • name:roam~1

  • 匹配与roam差一个character的词,比如foam roams等。

  • 近似度查询proximity search

  • "fox quick"~5。

  • 以term为单位进行差异比较(允许有5个差异),比如"quick fox"、"quick brown fox"都会匹配。

3.Request Body Search

  • 将查询语句通过http request body发送到es,主要包含如下参数:

  • query 符合Query DSL语法的查询语句。

  • from,size。

  • timeout

  • sort

...

4.Query DSL

  • 基于json定义的查询语言,主要包含如下两种类型:

  • 字段类型查询

  • 如term、match、range等,只针对某一个字段进行查询。

  • 符合查询

  • 如boolean查询,包含一个或多个字段查询或符合查询语句。

5.字段类型查询关键字的使用

  • Match Query(会对查询语句进行分词处理)

  • Match Query示例如下:

  • Match Query流程

  • alfred 与 way的关系

默认情况下,alfred 于 way的关系是or,只要有alfred或者way的文档都会返回。如果需要两者都存在的文档才返回,可以通过配置operator参数来实现。

  • 通过minimum_should_match参数可以控制匹配的单词数

  • Match Phrase Query(会对查询语句进行分词处理)

  • 对字段作检索,有顺序要求,示例如下:

  • 通过slop参数可以控制单词间的间隔

意为允许java 与 engineer之间有一个term的差异。

  • Query String Query

  • 类似于URI Search中的q参数查询

  • Simple Query String Query

  • 类似于Query String,但是会忽略错误的查询语法,并且仅支持部分查询语法。

  • 其常用的逻辑符号如下,不能使用AND、OR、NOT等关键词。

  • + 代指AND。

  • | 代指OR。

  • - 代指NOT。

  • Term Query

  • 将查询语句作为整个单词进行查询,即不对查询语句进行分词处理,如下所示:

  • 一次传入多个单词进行查询,如下所示:

  • Range Query

  • 范围查询主要针对数值和日期类型,如下所示:

  • 针对日期提供一种更友好的计算方式,格式如下:

  • 主要单位有如下几种:

6.符合查询

  • 符合查询是指包含字段类型查询或符合查询的类型,主要包括以下几类:

  • constant_score query

  • bool query

  • dix_max query

  • function_score query

  • boosting query

7.constant_score query

  • 该查询将其内部的查询结果文档得分都设定为1或者boost的值

  • 多用于结合bool查询实现自定义得分。

8.bool query

  • bool查询由一个或多个bool子句组成,主要包含如下四个:

  • bool query的查询API如下所示:

  • filter 查询只过滤符合条件的文档,不会进行相关性算分

  • es针对filter会有智能缓存,因此执行效率很高。

  • 做简单匹配查询且不考虑算分时,推荐使用filter代替query。

  • must

  • must_not

  • should

  • bool 查询中只包含should,不包含must的查询。

  • 只包含should时,文档必须满足至少一个条件,minimum_should_match参数可以控制满足条件的个数和百分比。

  • bool 查询中同时包含should和must的查询。

  • 同时包含should和must时,文档不必满足should中的条件,但如果满足会增加相关性得分。

  • 当一个查询语句位于query或者filter上下文时,es的执行结果会有不同,对比如下:

9.count API

  • 获取符合条件的文档数,endpoint为_count

10.Source Filtering

  • 过滤返回结果中_source中的字段,目的是减少网络数据包的大小,主要有一下几种形式:

来源:

https://coding.imooc.com/learn/list/181.html

官方地址:

https://www.elastic.co/guide/en/elasticsearch/reference/6.0/_basic_concepts.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值