文章目录
- 一、作者有话说
-
- 1.1 专业术语(必须进行掌握)
-
- 1.1.1 索引 index
- 1.1.2 映射 mapping
- 1.1.3 字段 field
- 1.1.4 术语 term
- 1.1.5 文本 text
- 1.2 操作工具为 elasticsearch head
- 二、实际进行操作
-
- 2.1 操作es的步骤
- 2.1 使用自动创建的形式创建index
-
- 2.1.1 常规操作创建格式: POST 索引/_doc
- 2.1.2 查看 创建的索引和数据
- 2.2 删除index
-
- 2.2.1 删除格式: DELETE /索引
- 三、从es head来看es的重要的搜索功能
-
- 3.1 查找某个文档的全部内容 match_all
-
- 3.1.1 查看全部格式: POST 索引/_search
- 3.2 search的各种过滤,注意看每张图的区别
-
- 3.2.1 match 全文匹配
- 3.2.2 term 术语查询
- 3.2.3 wildcard 通配符查询
- 3.2.4 prefix 前缀查询
- 3.2.5 fuzzy 模糊查询
- 3.2.6 range 范围查询
- 3.2.7 query_string 查询解析器
- 四、结尾
一、作者有话说
本文为了更加详细的讲解elasticsearch的操作,全部都是根据官网一点点进行说明。有兴趣对官网进行阅读的同学,建议移步官网
https://www.elastic.co/guide/en/elasticsearch/reference/7.5/getting-started-index.html
1.1 专业术语(必须进行掌握)
专业术语对学一个中间件来说,是非常重要的,建议大家先了解以下的专业术语
https://blog.csdn.net/qq_34168515/article/details/108315484
本文只介绍几个常用的术语
1.1.1 索引 index
索引就像关系数据库中的表。它具有一个包含type的 映射,该type包含索引中的字段。
注意:因为从6.x开始,就不推荐使用type是,但是为了兼容以下版本,type统一为 _doc
1.1.2 映射 mapping
映射就像关系数据库中的架构定义。每个 索引都有一个映射,该映射定义一个type,以及许多索引范围的设置。
注意:mapping一旦生成之后,就无法进行修改了,除非重新建立一个新的索引,再拷贝过去
1.1.3 字段 field
一个文件包含字段或键-值对的列表。该值可以是简单(标量)值(例如,字符串,整数,日期),也可以是嵌套结构(如数组或对象)。字段类似于关系数据库中表中的列
1.1.4 术语 term
术语是在Elasticsearch中索引的精确值。该条款 foo,Foo,FOO是不等价的。可以使用术语查询来搜索术语(即精确值)。
1.1.5 文本 text
文本(或全文)是普通的非结构化文本,例如本段。默认情况下,文本将被分析为 term,这是索引中实际存储的内容。
文本字段需要在索引时进行分析才能作为全文搜索,并且全文查询中的关键字必须在搜索时进行分析以产生(和搜索)与索引时生成的词相同的术语。
1.2 操作工具为 elasticsearch head
es head的下载方式,由于篇幅问题,请自行百度!!!!!!
二、实际进行操作
参考官方 rest-api操作
https://www.elastic.co/guide/en/elasticsearch/reference/7.9/rest-apis.html
2.1 操作es的步骤
2.1 使用自动创建的形式创建index
elasticsearch head操作
2.1.1 常规操作创建格式: POST 索引/_doc
POST 索引/_doc
{json方法体
}
案例,为索引为can123添加数据,不指定id,会自动增加id
POST can123/_doc
{"user" : "kimchy","createDate" : "2020-09-06 11:19:10","message" : "trying out Elasticsearch"
}
2.1.2 查看 创建的索引和数据
索引、索引对应的mapping,也就是数据库格式,都创建好了,我们查看一下
存在问题?由于createTime字段,是需要date时间格式的,但是mapping映射却是text格式,明显是不对,后续介绍如何进行处理
按照前面的例子进行增加
{"user":"dog","createDate":"2020-09-06 11:19:10","message":"four leg dog"}
{"user":"cat","createDate":"2020-09-06 11:19:10","message":"four leg cat"}
{"user":"frog","createDate":"2020-09-06 11:19:10","message":"four leg frog"}
{"user":"pig","createDate":"2020-09-06 11:19:10","message":"four leg pig"}
{"user":"duck","createDate":"2020-09-06 11:19:10","message":"two leg duck"}
{"user":"chick","createDate":"2020-09-06 11:19:10","message":"chick leg chick"}
2.2 删除index
- 首先添加一个索引,方面后面删除
POST twitter/_doc/
{"user" : "kimchy","post_date" : "2009-11-15T14:12:12","message" : "trying out Elasticsearch"
}
2.2.1 删除格式: DELETE /索引
- 删除索引格式:
DELETE /索引
- 删除索引中的id格式
DELETE /索引/文档id
- 删除索引为 twitter
DELETE /twitter/
三、从es head来看es的重要的搜索功能
3.1 查找某个文档的全部内容 match_all
3.1.1 查看全部格式: POST 索引/_search
- 搜索格式
POST 索引/_search
- 例如,搜索can123的所有数据
POST can123/_search
3.2 search的各种过滤,注意看每张图的区别
3.2.1 match 全文匹配
match和term的区别是,match查询的时候,elasticsearch会根据你给定的字段提供合适的分析器,而term查询不会有分析器分析的过程
查询 message 包含关键字dog的文档,ps: 注意和 term 的区别
查询 message 包含 red dog的文档,ps: 注意和 term 的区别
3.2.2 term 术语查询
term是代表完全匹配,即不进行分词器分析,文档中必须包含整个搜索的词汇
查询 message 包含关键字dog的文档,ps: 注意和 match 的区别
查询 message 包含 red dog的文档,ps: 注意和 match 的区别
结论:
-
match进行分词器分析, 所谓的分词,就是把当前的value进行分词
-
term是代表完全匹配,即不进行分词器分析
3.2.3 wildcard 通配符查询
类似正则表达式,可以对数据进行过滤查找
查找ck,如果正常的match是无法查找到的
采用通配符查询 *ck,就可以查找到
3.2.4 prefix 前缀查询
类似通配符查询,查找以xxx开头的关键字,参与倒排索引的每一个词查询前缀
3.2.5 fuzzy 模糊查询
在实际的搜索中,我们有时候会打错字,从而导致搜索不到。在Elasticsearch中,我们可以使用fuzziness属性来进行模糊查询,从而达到搜索有错别字的情形。
match查询具有“fuziness”属性。它可以被设置为“0”, “1”, “2”或“auto”。“auto”是推荐的选项,它会根据查询词的长度定义距离。
错别字模糊查询:那么它可以显示搜索的结果,这是因为我们能够容许两个编辑的错误。模糊性是拼写错误的简单解决方案,但具有很高的CPU开销和非常低的精度。
但是使用fuzzy查找 chack是可以查找到 chick的
3.2.6 range 范围查询
范围查询,感觉非常好理解,就是 lt 小于某个范围, gt大于某个范围。
3.2.7 query_string 查询解析器
官方解释:使用具有严格语法的解析器,根据提供的查询字符串返回文档。
该查询使用语法根据操作符(如and或NOT)来解析和分割所提供的查询字符串。然后,查询在返回匹配的文档之前独立分析每个分割文本。
可以使用query_string查询创建包含通配符的复杂搜索、跨多个字段的搜索等等。虽然通用,但查询是严格的,如果查询字符串包含任何无效语法,则返回错误。
可以写正则表达式,或者使用or and 等对查询语句进行拼接,会更加灵活
四、结尾
大部分的程序员,都是面向百度或者谷歌进行编程的,而网上的资料乱七八糟,有时候找起来让人难受,于是本人无偿进行资料收集的工作,大部分资料都是本人实打实收集的而且测试过,大家不用怀疑准确性,奈何能力有限,免于遗漏,希望读者可以在评论或者私信我,进行改正,大家一起为互联网技术做贡献。
========================
收集资料枯燥无味,如果本文对你有帮助,可以点个赞,这个也是对我最大的鼓励和赞许。
本人行不改名坐不改姓,潮汕的灿灿展
立志在互联网这一行,做出自己的贡献
========================