暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Elasticsearch简介与实战

哪吒学Java 2021-10-09
370

一、Elasticsearch简介


Elasticsearch是一个分布式、RESTful风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为Elastic Stack的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。


The Elastic Stack包括Elasticsearch、Kibana、Beats和Logstash,也称为ELK Stack。


能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。


Elasticsearch简称ES,ES是一个开源的高扩展的分布式全文搜索引擎,是整个Elastic Stack技术栈的核心,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。


PB是数据存储容量的单位,它等于2的50次方个字节,或者在数值上大约等于1000TB。


二、下载与安装

1、Elasticsearch官网下载地址

Download Elasticsearch Free | Get Started Now | Elastic | Elastic


2、下载成功 

3、双击elasticsearch.bat启动 


4、启动成功

三、数据格式

Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档。为了方便大家理解,我们将Elasticsearch里存储文档数据和关系型数据库Mysql存储数据的概念进行一个类比:

ES里的Index可以看做一个库,而Types相当于表,Documents则相当于表的行。

Elasticsearch7.X中,Type的概念已经被删除了。

四、索引

1、创建索引

在postman中,向ES服务器发送PUT请求:127.0.0.1:9200/work

由于PUT请求具有幂等性,每次PUT请求创建的结果都是一样的,再次请求时,由于ES中已经存在名为work的索引了,所以会创建失败。

POST是不具有幂等性的,所以POST请求后,结果可能不一样,所以添加索引的时候是不允许使用POST请求的。

什么是幂等性?

在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。

什么是幂等性?

在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。

2、查询索引

(1)通过GET请求可以获取单一索引

(2)获取全部索引信息

127.0.0.1:9200/_cat/indices?v

3、删除索引

五、文档

 1、创建文档

ES中的文档相当于MySQL中的表数据,数据格式为JSON格式。

由于文档生成时会自动创建一个唯一性标识,因为POST不是幂等性的,PUT是幂等性的,所以这里只能用POST。

 2、查询文档

(1)根据id查询

 (2)查询所有文档

127.0.0.1:9200/work/_search

 3、更改文档内容

(1)修改文档id=1001的内容,恭喜哪吒大佬被评选为“2021博客之星TOP10”,锣鼓喧天,鞭炮旗鼓。

(2)局部更新

(3)局部更新成功,恭喜哪吒成功晋升TOP5。

六、复杂查询

1、指定条件查询

(1)查询name为哪吒的索引(通过请求路径:127.0.0.1:9200/work/_search?q=name:哪吒)

注意:满篇全是截图也不好看,以下就不截图了,望谅解。

 (2)请求体查询

get请求:127.0.0.1:9200/work/_search

请求体:



{
"query":{
"match":{
"name":"哪吒"
}
}
}

 (3)分页查询

get请求:127.0.0.1:9200/work/_search

请求体:

{
"query":{
"match_all":{

}
} ,
"from":0,
"size":2
}

 (4)只获取指定字段  and  根据id排序


{
"query":{
"match_all":{

}
} ,
"from":0,
"size":2,
"_source":["title"],
"sort":{
"_id":"desc"
}
}

2、多条件查询

must表示and匹配

{
"query":{
"bool":{
"must":[
{
"match":{
"name":"哪吒"
}
},{
"match":{
"title":"博客专家"
}
}
]
}
}
}

should表示or匹配


{
"query":{
"bool":{
"should":[
{
"match":{
"name":"哪吒"
}
},{
"match":{
"name":"CSDN"
}
}
]
}
}
}

范围匹配:工资大于10000

{
"query":{
"bool":{
"should":[
{
"match":{
"name":"哪吒"
}
},{
"match":{
"name":"CSDN"
}
}
],
"filter":{
"range":{
"money":10000
}
}
}
}
}

3、部分词汇匹配查询

将每一个值拆解,组成倒排索引,方便进行全文检索。

{
"query":{
"match":{
"name":"哪"
}
}
}


完全匹配

{
"query":{
"match_phrase":{
"name":"哪"
}
}
}

高亮显示

{
"query":{
"match":{
"name":"哪"
}
},
"highlight":{
"fields":{
"name":{}
}
}
}

4、聚合查询

(1)分组查询

{
"aggs":{
"money_group":{
"terms":{
"field":"money"
}
}
},
"size":0
}

(2)平均值查询

{
"aggs":{
"money_avg":{
"avg":{
"field":"money"
}
}
},
"size":0
}



文章转载自哪吒学Java,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论