ES的简介
数据库查询存在的问题:
1.性能低:使用模糊查询,左边有通配符,不会走索引,会全表扫描,性能低
2.功能弱:如果以”华为手机“作为条件,查询不出来数据
es 相对关系型数据查询
词条 :将一段文本按照一定的规则,拆分为不同的词条(term)
倒排索引:将各个文档中的内容,进行分词,形成词条。然后记录词条和数据的唯一标识(id)的对
心应关系,形成的产物(倒排索引)。
正排索引 : 根据标题查询内容
倒排索引 : 根据词条查询内容,根据词条查询唯一标识(多个id 列表),根据唯一标识查询内容(分为两步执行)
生成的倒排索引中,词条会排序,形成一颗树形结构,提升词条的查询速度
es应用场景:
实时数据分析
搜索海量数据时
Mysql和es区别
MySQL有事务性而ElasticSearch没有事务性所以你删了的数据是无法恢复的。
.ElasticSearch没有物理外键这个特性,如果你的数据强一致性要求比较高还是建议慎用
ElasticSearch核心概念
索引(index)
ElasticSearch存储数据的地方,可以理解成关系型数据库中的数据库概念。
映射(mapping)
mapping定义了每个字段的类型、字段所使用的分词器等。相当于关系型数据库中的表结构。
文档(document)
Elasticsearch中的最小数据单元,常以json格式显示。一个document相当于关系型数据库中的一行数据。
倒排索引
一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,对应一个包含它的
]文档id列表。
类型(type)
一种type就像一类表。如用户表、角色喂等。
在Elasticsearch7.X默认type为_doc-ES 5.x中一个index可以有多种type。
- ES 6.x中一个index只能有一种type。
-ES 7.x以后,将逐步移除type这个概念,现在的操作已经不再使用,默认_doc
ES 默认使用的分词器是Standard 一个一个的分词的.
#match 。先会对查询的字符串进行分词,在查询。求交集GET penson/_search
"query": {
"match":{
"'address":“华为手机|
}
}
ik分词器
存储数据的时候安细粒度分词
如果场景需要有些词不能分词 可以去ik词典里添加就不会在分词.
ESApi :
springboot整合ES
交互的对象
RestHighLevelclient client = new RestHighLevelclient(RestClient.builder(
new HttpHost(
hostname: "192.168.149.135",port: 9200,
scheme: "http"
));
----------------------------------------------------------------------------------------------------------------------
ElasticSearch高级操作
批量操作:
Bulk批量操作是将文档的增删改查一些列操作,通过一次请求全都做完。减少网络传输次数。
批量操作格式:
#批里架作
# 1,删除5号记录
#2.添加8号记录
# 3,修改2号记录名称为“二号”
POST _bulk
{"delete":i"_index" : "person","_id”:"5"}}
{"create":{"_index" : ""person","_id":""8”}}
{ "name":"八号”, "age" :80, "address":”北京"}
{ "update:{"_index" :"person","_id":”2”}}
{ "doc" : { "name":“二号"}
●导入数据
●各种查询
索引别名和重建索引
---------------------------------------------------------------------------------------------------------------------------
布尔查询-脚本
boolQuery:对多个查询条件连接。连接方式:.
must (and):条件必须成立
must_not (not):条件必须不成立.
should (or):条件可以成立
. filter:条件必须成立,性能比must高。不会计算得分个