![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Elasticsearch
焦焦^_^
这个作者很懒,什么都没留下…
展开
-
ES:什么是mapping
自动或手动为index中的type建立的一种数据结构和相关配置,简称为mappingdynamic mapping,自动为我们建立index,创建type,以及type对应的mapping,mapping中包含了每个field对应的数据类型,以及如何分词等设置GET /website/_mapping/article{ "website&am原创 2018-09-27 17:45:50 · 3173 阅读 · 0 评论 -
ES:master选举,replica容错,数据恢复
(1)9 shard,3 node(2)master node宕机,自动master选举,red(3)replica容错:新master将replica提升为primary shard,yellow(4)重启宕机node,master copy replica到该node,使用原有的shard并同步宕机后的修改,green...原创 2018-09-20 15:57:00 · 385 阅读 · 0 评论 -
ES:shard&replica机制
1、shard&replica机制(1)index包含多个shard(2)每个shard都是一个最小工作单元,承载部分数据,lucene实例,完整的建立索引和处理请求的能力(3)增减节点时,shard会自动在nodes中负载均衡(4)primary shard和replica shard,每个document肯定只存在于某一个primary shard以及其对应的replica s...原创 2018-09-18 17:55:33 · 6992 阅读 · 0 评论 -
ES:基础分布式架构
1、Elasticsearch对复杂分布式机制的透明隐藏特性分片机制cluster discovery(集群发现机制)shard负载均衡shard副本,请求路由,集群扩容,shard重分配2、Elasticsearch的垂直扩容与水平扩容垂直扩容:采购更强大的服务器,成本非常高昂,而且会有瓶颈,假设世界上最强大的服务器容量就是10T,但是当你的总数据量达到5000T的时候,你要采购多少...原创 2018-09-18 17:02:17 · 427 阅读 · 0 评论 -
ES:Query DSL搜索语法
1、Query DSL的基本语法{ QUERY_NAME: { ARGUMENT: VALUE, ARGUMENT: VALUE,... }}{ QUERY_NAME: { FIELD_NAME: { ARGUMENT: VALUE, ARGUMENT: VALUE,.....原创 2018-11-01 15:00:09 · 5299 阅读 · 1 评论 -
ES:修改分词器以及定制自己的分词器
1、默认的分词器standardstandard tokenizer:以单词边界进行切分standard token filter:什么都不做lowercase token filter:将所有字母转换为小写stop token filer(默认被禁用):移除停用词,比如a the it等等2、修改分词器的设置PUT /my_index{ "settings": { "...原创 2018-11-02 16:04:35 · 9207 阅读 · 0 评论 -
ES:定制搜索结果的排序规则
1、默认排序规则默认情况下,是按照_score降序排序的GET /_search{ "query": { "bool": { "filter": { "term": { "author_id": 110 } } } }}GET /_search{ "query": {原创 2018-11-02 14:19:06 · 8533 阅读 · 0 评论 -
ES:搜索引擎内核解密
1、doc values搜索的时候,要依靠倒排索引;排序的时候,需要依靠正排索引,看到每个document的每个field,然后进行排序,所谓的正排索引,其实就是doc values在建立索引的时候,一方面会建立倒排索引,以供搜索用;一方面会建立正排索引,也就是doc values,以供排序,聚合,过滤等操作使用doc values是被保存在磁盘上的,此时如果内存足够,os会自动将其缓存在内...原创 2018-11-02 15:16:45 · 797 阅读 · 0 评论 -
ES:scoll技术滚动搜索大量数据
如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scoll滚动查询,一批一批的查,直到所有数据都查询完处理完使用scoll滚动搜索,可以先搜索一批数据,然后下次再搜索一批数据,以此类推,直到搜索出全部的数据来scoll搜索会在第一次搜索的时候,保存一个当时的视图快照,之后只会基于该旧的视图快照提供数据搜索,如果这个期间数据变更,是不会让用户看到的采用基于_doc进行排序的...原创 2018-11-02 15:29:36 · 1168 阅读 · 0 评论 -
ES:定制化自己的dynamic mapping策略
1、定制dynamic策略true:遇到陌生字段,就进行dynamic mappingfalse:遇到陌生字段,就忽略strict:遇到陌生字段,就报错PUT /my_index{ "mappings": { "my_type": { "dynamic": "strict", "properties": { "title": {原创 2018-11-05 11:17:58 · 1315 阅读 · 0 评论 -
ES:基于scoll+bulk+索引别名实现零停机重建索引
1、重建索引一个field的设置是不能被修改的,如果要修改一个Field,那么应该重新按照新的mapping,建立一个index,然后将数据批量查询出来,重新用bulk api写入index中批量查询的时候,建议采用scroll api,并且采用多线程并发的方式来reindex数据,每次scoll就查询指定日期的一段数据,交给一个线程即可(1)一开始,依靠dynamic mapping,插入...原创 2018-11-05 11:41:25 · 624 阅读 · 0 评论 -
ES:倒排索引、分词详解
一,倒排索引(Inverted Index)ElasticSearch引擎把文档数据写入到倒排索引(Inverted Index)的数据结构中,倒排索引建立的是分词(Term)和文档(Document)之间的映射关系,在倒排索引中,数据是面向词(Term)而不是面向文档的。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表示例:对以下三个文档去除停用词后构造...原创 2018-11-05 17:09:28 · 23585 阅读 · 2 评论 -
ES:document的_source元数据以及定制返回结果解析
1、_source元数据PUT /test_index/test_type/1{ "test_field1":"test_field1", "test_field2":"test_field2"}GET /test_index/test_type/1{ "_index": "原创 2018-09-21 16:16:07 · 1971 阅读 · 0 评论 -
ES:document查询内部原理揭秘
1、客户端发送请求到任意一个node,成为coordinate node2、coordinate node对document进行路由,将请求转发到对应的node,此时会使用round-robin随机轮询算法,在primary shard以及其所有replica中随机选择一个,让读请求负载均衡3、接收请求的node返回document给coordinate node4、coordinate n...原创 2018-09-27 14:26:13 · 580 阅读 · 0 评论 -
ES:_search结果深入解析
1、搜索的timeout机制,底层的原理GET /_search{ "took": 4, "timed_out": false, "_shards": { "total": 12, "successful": 12,原创 2018-09-27 16:56:49 · 8014 阅读 · 0 评论 -
ES:集群健康检查
1.快速检测集群的健康状况GET /_cat/health?vepoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent 1488006741 15:12...原创 2018-09-17 15:51:48 · 3530 阅读 · 0 评论 -
ES:document增删改内部原理揭秘
3个primary shard,replica=1,要求至少3个shard是active,3个shard按照之前学习的shard&replica机制,必须在不同的节点上,如果说只有2台机器的话,是不是有可能出现说,3个shard都没法分配齐全,此时就可能会出现写操作无法执行的情况原创 2018-09-26 17:23:02 · 454 阅读 · 0 评论 -
ES:mget批量查询、bulk批量增删改
1、mget批量查询GET /_mget{ "docs": [ { "_index": "test_index", "_type": "test_type原创 2018-09-25 17:27:10 · 1021 阅读 · 0 评论 -
ES:partial update 原理、 基于groovy使用、 内置乐观锁并发控制
1、partial update基本语法POST /index/type/id/_update{ "doc" : { "要修改的少数几个field即可,不需要全量的数据" }}每次就传递少数几个发生修改的field即可,不需要将全量的document数据发送过去2、partial update实现原理以及优点3、例子:POST /test_inde...原创 2018-09-25 15:42:47 · 252 阅读 · 1 评论 -
ES:基于_version进行乐观锁并发控制
图示的冲突过程,其实就是es的并发冲突问题,会导致数据不准确当并发操作es的线程越多,或者读取一份数据,供用户查询和操作的时间越长,在这段时间里,如果数据被其他用户修改,那么我们拿到的就是旧数据,基于旧数据去操作,就会导致错误的结果1、悲观锁与乐观锁两种并发控制方案悲观锁(Pessimistic Lock),,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人...原创 2018-09-21 18:11:23 · 2257 阅读 · 0 评论 -
ES:document的全量替换、强制创建以及图解lazy delete机制
1、document的全量替换(1)语法与创建文档是一样的,如果document id不存在,那么就是创建;如果document id已经存在,那么就是全量替换操作,替换document的json串内容PUT /test_index/test_type/4{ "test_fied":"test test1111111"}(2)document是不可变的,如果要修改docume原创 2018-09-21 16:47:15 · 503 阅读 · 0 评论 -
ES:解析document的核心元数据
1、_index元数据(1)代表一个document存放在哪个index中(2)类似的数据放在一个索引,非类似的数据放不同索引:product index(包含了所有的商品),sales index(包含了所有的商品销售数据),inventory index(包含了所有库存相关的数据)。如果你把比如product,sales,human resource(employee),全都放在一个大的i...原创 2018-09-20 17:03:12 · 635 阅读 · 0 评论 -
ES:横向扩容过程,如何超出扩容极限,以及如何提升容错性
(1)primary&replica自动负载均衡,6个shard,3 primary,3 replica(2)每个node有更少的shard,IO/CPU/Memory资源给每个shard分配更多,每个shard性能更好(3)扩容的极限,6个shard(3 primary,3 replica),最多扩容到6台机器,每个shard可以占用单台服务器的所有资源,性能最好(4)超出扩容极限...原创 2018-09-20 15:32:59 · 2212 阅读 · 2 评论 -
ES:多种搜索方式
1、query string search 搜索全部:GET /ecommerce/product/_search{ "took": 2, "timed_out": false, "_shards&a原创 2018-09-17 17:36:03 · 3195 阅读 · 0 评论 -
ES:NRT、索引、分片、副本等
(1)Near Realtime(NRT):近实时,两个意思,从写入数据到数据可以被搜索到有一个小延迟(大概1秒);基于es执行搜索和分析可以达到秒级(2)Cluster:集群,包含多个节点,每个节点属于哪个集群是通过一个配置(集群名称,默认是elasticsearch)来决定的,对于中小型应用来说,刚开始一个集群就一个节点很正常(3)Node:节点,集群中的一个节点,节点也有一个名称(默...原创 2018-09-17 16:06:25 · 2102 阅读 · 0 评论 -
ES:写入原理详解
(1)数据写入buffer(2)commit point(3)buffer中的数据写入新的index segment(4)等待在os cache中的index segment被fsync强制刷到磁盘上(5)新的index sgement被打开,供search使用(6)buffer被清空每次commit point时,会有一个.del文件,标记了哪些segment中的哪些document...原创 2018-11-05 17:27:53 · 16724 阅读 · 11 评论