ES学习
es简介(是什么)
-
概念
Elasticsearch 是一个实时的分布式存储、搜索、分析的引擎,使用一种称为
-
背景
Elasticsearch由一些Elasticsearch进程(Node)组成集群(cluster),用来存放索引(Index)。为了存放数据量很大的索引,Elasticsearch将Index切分成多个分片(Shard),在这些Shard里存放一个个的文档(document)。通过这一批shard组成一个完整的index。并且,每个Shard可以设置一定数量的副本(Replica),写入的文档同步给副本Shard,副本Shard可以提供查询功能,分摊系统的读负载。在主Shard所在Node(ES进程)挂掉后,可以提升一个副本Shard为主Shard,文档继续写在新的主Shard上,来提升系统的容灾能力。
es中名词及解释
集群(cluster)/节点(node)
es本身就是一个集群,去中心化,无中心节点。假设索引index配置了10个分片,1个副本,那么总共的分片数应该是20个,10 *(1+1),那么最大的Elasticsearch节点数应该就是20。
最大节点数 = 分片数 ✖ (副本数+1)
分片(shards)
代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
路由(routing)
在存入时通过路由键将数据存入指定分片,在查询的时候可以通过相同的路由键指明在哪个分片将数据查出来。
只查询一个shard,避免在其他shard无用的查询与master上的合并,提升了查询效率。
索引(index)
es数据管理得顶层单位,类似关系型数据库中得数据库。等同于mysql中的database,数据库。
类型(type)
目前已弃用,类似mysql中的表,即分类。
文档(document)
一条数据就是一个文档。类似MySQL中的row。
字段(fields)
类似mysql中的column。
关系对比:
Elasticsearch --------------> Index------------->Type------>Documents------->Fields
RelationDB ---------------->Databases------->Table------>Rows--------------->Columns
es与solr对比
Solr与ES都是基于java/lucence来做一套面向文档结构的Nosql结构的数据库
-
分布式solr 分布式 需要结合zookeeper 来实现,ES 自身有相关分布式协调。
-
支持的数据结构solr支持 xml json html 等多种数据结构,而ES 仅支持json这种结构。
-
性能solr在新建索引时是IO阻塞的,如果在新建索引时同时进行搜索,ES来的相对较快。所以在实时性上,ElasticSearch 相比还是更好的选择。
总结:如果单纯的对已有数据进行查询,那么solr查询效果更快。
常用命令行(基于kibana操作)
索引操作
-
创建索引 PUT/索引名
z
-
查询索引 GET/索引名
-
删除索引 DELETE/索引名
-
创建规则(设置属性)
z
text属性与keyword属性
Text:会分词,然后进行索引支持模糊、精确查询不支持聚合
keyword:不进行分词,直接索引支持模糊、精确查询支持聚合
文档操作
-
创建文档 PUT/索引名/文档id
-
更新文档 POST/索引名/文档id/_update
-
删除文档 DELETE/索引名/文档id
-
查询文档
-
"must"属性,跟mysql中的and类似
-
"should"属性,跟mysql中的or类似
-
"must_not"属性,跟mysql中!=类似
-
"bool" 使用多个条件匹配
-
"match"属,模糊查找,会使用分词器
-
"term",精确产找,不会使用分词器
-
springboot集成es
-
引入依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.12.0</version>
</dependency>
-
构建es客户端对象,并纳入容器管理
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http"),
new HttpHost("localhost", 9201, "http")));
client.close(); -
创建索引
/**
* 创建索引
*/
-
判断索引是否存在
/**
* 判断索引是否存在
*/
-
删除索引
/**
* 删除索引
*/
-
创建文档
/**
* 创建文档
*/
-
获取文档
/**
* 获取文档
*/
-
更新文档
/**
* 更新文档
*/
-
删除文档
/**
* 删除文档
*/
-
批量插入文档
/**
* 批量插入数据
*/
-
搜索
/**
* 搜索
*/
浙公网安备 33010602011771号