这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战
视频课程:极客时间 – 《Elasticsearch核心技术与实战》– 配套代码 GitHub
系列文章:
《Elasticsearch核心技术与实战》笔记 – 第一章:概述
《Elasticsearch核心技术与实战》笔记 – 第二章:安装上手
《Elasticsearch核心技术与实战》笔记 – 第三章:ElasticSearch 入门(1)
《Elasticsearch核心技术与实战》笔记 – 第三章:ElasticSearch 入门(2)
URI Search 详解
URI Search - 通过 URI query 实现搜索
1 | json复制代码GET /movies/_search?q=2012&df=title&sort=year:desc&from=0&size=10&timeout=1s |
- q 指定查询语句,使用 Query String Syntax
- df 默认字段,不指定时,会对所有字段进行查询
- sort 排序
- from 和 size 用于分页
- profile 可以查看查询是如何被执行的
Query String Syntax(1)
- 指定字段 v.s 泛查询
+ q=title:2012 / q=2012
- Term v.s Phrase
+ Beautiful Mind 等效于 Beautiful OR Mind
+ “Beautiful Mind”,等效于 Beautiful AND Mind。Phrase 查询,还要求前后顺序保持一致
- 分组与引号
+ title:(Beautiful AND Mind)
+ title="Beautiful Mind"
Query String Syntax(2)
- 布尔操作
+ AND / OR / NOT 或者 && / || / !
- 必须大写
- title:(matrix NOT reloaded)
- 分组
+ +表示must
+ -表示 must\_not
+ title:(+matrix - reloaded)
Query String Syntax(3)
- 范围查询
+ 区间表示:[]闭区间,{}开区间
- year:{2010 TO 2018} 意为 2010 < year< 2018
- year:[\* TO 2018] 意为 year<=2018
- 算法符号
+ year:>2010 意为查找2010年以后的电影(不包含2010年)
+ year:(>2010 AND <=2018) 意为查找2010年至2018年的电影(不包含2010年且包含2018年)
+ year:(%2B>2010 AND %2B<2018) 意为查找2010年至2018年的电影(不包含2011年且不包含2018年)
思考:在kibana中无法输入{}作为查询条件?
Query String Syntax(4)
- 通配符查询(通配符查询效率低,占用内存大,不建议使用,特别是放在最前面
- ? 代表1个字符 ,* 代表0个或多个字符
- title:mi?d
- title:be*
- ? 代表1个字符 ,* 代表0个或多个字符
- 正则表达,这里并不支持所有的正则语法,使用的时候要注意查看官方文档说明。另外正则查询的内存压力也很大,要谨慎使用
- title:/[bt]oy/
- 模糊匹配与近似查询
- title:befutifl~1
- title:”lord rings”~2
RequestBody 与 QueryDSL 简介
Request Body Search
- 将查询语句通过 HTTP Request Body 发送给 ElasticSearch
- Query DSL(Domain Specific Language 查询表达式)
- 高阶语法只能通过 Request Body Search 来实现,建议使用 Request Body Search 实现查询功能
ignore_unavailable
:如果URL中一个或多个索引不存在的时候,ignore_unavailable
表示是否忽略这些索引,值为true和false;profile
: 是否打开性能分析;match_all
:匹配所有;
分页查询
- From 从 0 开始,默认返回 10 个结果
- 获取靠后的翻页成本较高
排序
- 最好在 “数字型” 与 “日期型” 字段上排序
- 因为对于多值类型或分析过的字段排序,系统会选一个值,无法得知该值
_source filtering
- 过滤你要查询的字段信息
- 如果 _source 没有存储,那就只返回匹配文档的元数据
- _source 支持使用通配符
_source[“name*“,”desc*“]
脚本字段
- 通过
painless
脚本,计算你所需要的新字段 - 用例:订单中有不同的汇率,需要结合汇率对订单价格进行排序
使用查询表达式 - Match
- match 默认使用 OR 连接查询
- 添加
operator
属性,改变单词连接方式
使用查询表达式 - Match_Phrase
match_phrase查询分析文本并根据分析的文本创建一个短语查询。match_phrase 会将检索关键词分词。match_phrase的分词结果必须在被检索字段的分词中都包含,而且顺序必须相同,而且默认必须都是连续的。
区别与match:match模糊匹配,先对输入进行分词,对分词后的结果进行查询,文档只要包含match查询条件的一部分就会被返回。
match_phrase 核心参数:slop 参数-Token之间的位置距离容差值
QueryString & SimpleQueryString 查询
Query String Query
- 类似URI Query
Simple Query String Query
本文转载自: 掘金