ElasticSerach学习整理
1.了解ElasticSearch
1)Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布
2)ElasticSearch是一个基于Lucene的搜索服务器
试图通过JSON和Java API提供其所有特性
隐藏了Lucene的复杂性,对外提供Restful 接口来操作索引、搜索
2.ElasticSearch与Solr
1)solr在查询死数据时,速度相对于ElasticSearch更快一些。但是数据如果是实时改变的,solr的查询会降低很多,ElasticSearch的查询效率基本没有变化
2)solr搭建需要基于依赖Zookeeper来帮助管理。ElasticSearch本身就支持集群的搭建,不需要第三方介入
3…ElasticSearch 的实现原理
1)用户将数据提交到Elastic Search 数据库中
2)分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户
4.ElasticSearch概念
1 )cluster:
代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的
2 )shards:
代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改
3 )replicas:
代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡
4 )recovery:
代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复
river:代表es的一个数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法。它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的
5) gateway:
代表es索引快照的存储方式,es默认是先把索引存放到内存中,当内存满了时再持久化到本地硬盘。gateway对索引快照进行存储,当这个es集群关闭再重新启动时就会从gateway中读取索引备份数据。es支持多种类型的gateway,有本地文件系统(默认),分布式文件系统,Hadoop的HDFS和amazon的s3云存储服务
6 )discovery.zen:
代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互
7)Transport:
代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)
8) 映射(Mapping);
映射是用于定义ES对索引中字段的存储类型、分词方式和是否存储等信息,就像数据库中的 schema ,描述了文档可能具有的字段或属性、每个字段的数据类型。只不过关系型数据库建表时必须指定字段类型,而ES对于字段类型可以不指定然后动态对字段类型猜测,也可以在创建索引时具体指定字段的类型
对字段类型根据数据格式自动识别的映射称之为动态映射(Dynamic mapping),我们创建索引时具体定义字段类型的映射称之为静态映射或显示映射(Explicit mapping)
简单而言之,就是相当于关系型数据库的字段关系
5.ElasticSearch结构
1)索引(index)
ES的服务中,可以创建多个索引
每一个索引默认被分成5片存储
每一个分片都会存在至少一个备份分片,备份分片默认不会帮助检索数据,ES检索压力特别大时除外
2)类型(type)
ElasticSearch7.x中type默认为 _doc
ElasticSearch6.x中一个index能创建一个type
ElasticSearch5.x中一个index能创建多个type
3)文档
一个类型下可以有多个文档
文档在ElasticSearch服务中的唯一标识,_index , _type , _id三个内容为组合
4)属性(Field)
一个文档中可以包含多个多个属性
6.ElasticSearch的restful语法
method | url地址 | 描述 |
---|---|---|
PUT | localhost:9200/索引名称/类型名称/文档id | 创建文档(指定文档id) |
POST | localhost:9200/索引名称/类型名称 | 创建文档(随机文档id) |
DELETE | localhost:9200/索引名称/类型名称/文档id | 删除文档 |
POST | localhost:9200/索引名称/类型名称/文档id/_update | 修改文档 |
GET | localhost:9200/索引名称/类型名称/文档id | 查询文档(通过文档id) |
POST | localhost:9200/索引名称/类型名称/_search | 查询所有数据 |
7.倒排索引
1)将存放的数据以一定的方式进行分词,并且将分词的内容存放到一个单独的分词库中
2)用户查询数据时,会将用户的查询关键字进行分词
3)去分词库中匹配内容,最终得到数据的id标识
4)根据id标识去存放数据的位置拉取到指定的数据
8.ElasticSearch可以指定的类型
1)字符串类型
text:一般被用于全文检索,将当前Field进行分词
keyword:当前Field不会被分词
2)数值类型
long,integer,short,byte,double,float等
3)时间类型
date类型:针对时间类型指定具体的格式
4)布尔类型
Boolean类型:表达true或false
5)二进制类型
binary类型暂时支持Base64 encode string、
6)范围类型
long_range:赋值时,无序指定具体的内容,只需存储一个范围即可
integer,double,float,date,ip,同上
7)经纬度类型
geo_point:用来存储经纬度
8)ip类型
ip:可以存储IPV4或IPV6
9.索引的操作()
1)创建一个索引person分片5备份分片1
2)查看索引
3)删除索引
4)创建索引并指定数据结构
5)文档的操作
新建文档 自动生成id,手动指定id
修改文档 覆盖式修改,doc修改方式
根据id删除文档