官网解释如图所示:
The Elastic Stack, 包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。能够安全可靠地获取任何来源的任何格式的数据,然后对数据进行搜索、分析和可视化。
Elaticsearch,简称为 ES,ES 是一个开源的高扩展的分布式全文搜索引擎,是整个 Elastic Stack 技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据。
Windows 版的 Elasticsearch ,官网下载地址点击下载、解压,解压后的 Elasticsearch 的目录结构如下:
进入 bin 目录,点击 elasticsearch.bat 启动 ES 服务;浏览器输入:http://localhost:9200,如图所示,开启成功。本次下载是7.8.0版本。
索引的概念:
一个索引由一个名字来标识(必须全部是小写字母),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,可以定义任意多的索引。
创建索引,对比关系型数据库,创建索引就等同于创建数据库
在 Postman 中,向 ES 服务器发 PUT 请求 :http://127.0.0.1:9200/test_a
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/_cat/indices?v
请求路径中的_cat 表示查看的意思,indices 表示索引,v显示列的属性名
查看单个索引
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/test_a
删除索引
在 Postman 中,向 ES 服务器发 DELETE 请求 :http://127.0.0.1:9200/test_a
一个文档是一个可被索引的基础信息单元,也就是一条数据。
索引已经创建,接下来创建文档,并添加数据。这里的文档可以类比为关系型数据库中的表数据,添加的数据格式为 JSON格 式。
在 Postman 中,向 ES 服务器发 POST 请求 :http://127.0.0.1:9200/test_a/_doc/102
其中:1表示是自定义唯一性标识,需要在创建时指定;如果没有指定数据唯一性标识(ID),默认情况下,ES 服务器会随机
生成一个。
此处发送请求的方式必须为 POST,不能是 PUT,否则会发生错误;
查看文档时,需要指明文档的唯一性标识,类似于 MySQL 中数据的主键查询
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/test_a/_doc/101
和新增文档一样,输入相同的 URL 地址请求,如果请求体变化,会将原有的数据内容覆盖.
在 Postman 中,向 ES 服务器发 POST 请求 :http://127.0.0.1:9200/test_a/_doc/101
删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除)。
在 Postman 中,向 ES 服务器发 DELETE 请求 :http://127.0.0.1:9200/test_a/_doc/104
mapping 是处理数据的方式和规则方面做一些限制,如:某个字段的数据类型、默认值、分析器、是否被索引等等。
在 Postman 中,向 ES 服务器发 PUT 请求 :http://127.0.0.1:9200/student/_mapping
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/test_b/_mapping
请求参数: “query”:这里的 query 代表一个查询对象,里面可以有不同的查询属性。
“match_all”:查询类型,例如:match_all(代表查询所有), match,term , range 等等 {查询条件}:查询条件会根据类型的不同,写法不同。
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/test_a/_search
match 匹配类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是 or 的关系
multi_match 与 match 类似,不同的是它可以在多个字段中查询。
term 查询,精确的关键词匹配查询,不对查询条件进行分词。
精确匹配 term或者terms,如果要使用中文查询,是查不出来的,要改成***.keyword 如果是数字,可以不用加.keyword
默认情况下,Elasticsearch 在搜索的结果中,会把文档中保存在_source 的所有字段都返回。如果我们只想获取其中的部分字段,我们可以添加_source 进行过滤。
我们也可以通过:
includes:来指定想要显示的字段
excludes:来指定不想要显示的字段
bool
把各种查询通过must
(必须 )、must_not
(必须不)、should
(应该)的方式进行组合# must 选项看似杂乱,目的是理解ES的搜索原理。
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "米耳机123"
}
}
],
"must_not": [
{
"match": {
"price": 168
}
}
],
"should": [
{
"match": {
"images": "http://www.xiaomi.com/xm2.png"
}
}
]
}
}
}
range 查询找出那些落在指定区间内的数字或者时间。range 查询允许以下字符
操作符 | 说明 |
---|---|
gt | 大于 |
gte | 大于等于 |
lt | 小于 |
lte | 小于等于 |
返回包含与搜索字词相似的字词的文档。
fuzzy 查询会在指定的编辑距离内创建一组搜索词的所有可能的变体或扩展。然后查询返回每个扩展的完全匹配。通过 fuzziness 修改编辑距离。一般使用默认值 AUTO,根据术语的长度生成编辑距离。
{
"query": {
"fuzzy": {
"title": {
"value": "make",
"fuzziness":2
}
}
}
}
sort 可以让我们按照不同的字段进行排序,并且通过 order 指定排序的方式。desc 降序,asc升序。
{
"query": {
"match_all": {}
},
"sort": [
{
"price": {
"order": "desc"
}
},
{
"title.keyword": {
"order": "desc"
}
}
]
}
在进行关键字搜索时,搜索出的内容中的关键字会显示不同的颜色,称之为高亮。
{
"query": {
"match": {
"title": "米34"
}
},
"highlight": {
"pre_tags": "",
"post_tags": "",
"fields": {
"title": {}
}
}
}
from:当前页的起始索引,默认从 0 开始。 from = (pageNum - 1) * size
size:每页显示多少条
{
"query": {
"match_all": {}
},
"sort": [
{
"price": {
"order": "asc"
}
}
],
"from": 0,
"size": 3
}
聚合是对 es 文档进行统计分析,类似与关系型数据库中的 group by,比如取最大值、平均值等等。
{
"aggs": {
"max_price": {
"max": {
"field": "price"
}
}
},
"size": 0
}
{
"aggs": {
"sum_price": {
"sum": {
"field": "price"
}
}
},
"size": 0
}
3.stats 聚合,对某个字段一次性返回 count,max,min,avg 和 sum 五个指标
{
"aggs": {
"age_groupby": {
"terms": {
"field": "price"
}
}
},
"size": 0
}
其他聚合 :
对某个字段取平均值:avg
对某个字段的值进行去重之后再取总数:cardinality
以上是ES的安装和入门操作,重点理解和掌握索引、文档以及高级查询的操作。