10 2024 档案
摘要:课程大纲 1、重建索引 一个field的设置是不能被修改的,如果要修改一个Field,那么应该重新按照新的mapping,建立一个index,然后将数据批量查询出来,重新用bulk api写入index中 批量查询的时候,建议采用scroll api,并且采用多线程并发的方式来reindex数据,每
阅读全文
摘要:课程大纲 1、定制dynamic策略 true:遇到陌生字段,就进行dynamic mapping false:遇到陌生字段,就忽略 strict:遇到陌生字段,就报错 PUT /my_index { "mappings": { "my_type": { "dynamic": "strict", "
阅读全文
摘要:课程大纲 1、root object 就是某个type对应的mapping json,包括了properties,metadata(_id,_source,_type),settings(analyzer),其他settings(比如include_in_all) PUT /my_index { "
阅读全文
摘要:type,是一个index中用来区分类似的数据的,类似的数据,但是可能有不同的fields,而且有不同的属性来控制索引建立、分词器 field的value,在底层的lucene中建立索引的时候,全部是opaque bytes类型,不区分类型的 lucene是没有type的概念的,在document中
阅读全文
摘要:1、默认的分词器 standard standard tokenizer:以单词边界进行切分 standard token filter:什么都不做 lowercase token filter:将所有字母转换为小写 stop token filer(默认被禁用):移除停用词,比如a the it等
阅读全文
摘要:1、为什么我们要手动创建索引? 2、创建索引 创建索引的语法 PUT /my_index { "settings": { ... any settings ... }, "mappings": { "type_one": { ... any mappings ... }, "type_two": {
阅读全文
摘要:如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scoll滚动查询,一批一批的查,直到所有数据都查询完处理完 使用scoll滚动搜索,可以先搜索一批数据,然后下次再搜索一批数据,以此类推,直到搜索出全部的数据来 scoll搜索会在第一次搜索的时候,保存一个当时的视图快照,之后只会
阅读全文
摘要:1、preference 决定了哪些shard会被用来执行搜索操作 _primary, _primary_first, _local, _only_node:xyz, _prefer_node:xyz, _shards:2,3 bouncing results问题,两个document排序,fiel
阅读全文
摘要:课程大纲 1、fetch phbase工作流程 (1)coordinate node构建完priority queue之后,就发送mget请求去所有shard上获取对应的document (2)各个shard将document返回给coordinate node (3)coordinate node
阅读全文
摘要:1、query phase (1)搜索请求发送到某一个coordinate node,构构建一个priority queue,长度以paging操作from和size为准,默认为10 (2)coordinate node将请求转发到所有shard,每个shard本地搜索,并构建一个本地的priori
阅读全文
摘要:搜索的时候,要依靠倒排索引;排序的时候,需要依靠正排索引,看到每个document的每个field,然后进行排序,所谓的正排索引,其实就是doc values 在建立索引的时候,一方面会建立倒排索引,以供搜索用;一方面会建立正排索引,也就是doc values,以供排序,聚合,过滤等操作使用 doc
阅读全文
摘要:课程大纲 1、算法介绍 relevance score算法,简单来说,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度 Elasticsearch使用的是 term frequency/inverse document frequency算法,简称为TF/IDF算法 Term fre
阅读全文
摘要:如果对一个string field进行排序,结果往往不准确,因为分词后是多个单词,再排序就不是我们想要的结果了 通常解决方案是,将一个string field建立两次索引,一个分词,用来进行搜索;一个不分词,用来进行排序 PUT /website { "mappings": { "article":
阅读全文
摘要:1、默认排序规则 默认情况下,是按照_score降序排序的 然而,某些情况下,可能没有有用的_score,比如说filter GET /_search { "query" : { "bool" : { "filter" : { "term" : { "author_id" : 1 } } } } }
阅读全文
摘要:GET /test_index/test_type/_validate/query?explain { "query": { "math": { "test_field": "test" } } } { "valid": false, "error": "org.elasticsearch.comm
阅读全文
摘要:课程大纲 GET /website/article/_search { "query": { "bool": { "must": [ { "match": { "title": "elasticsearch" } } ], "should": [ { "match": { "content": "e
阅读全文
摘要:课程大纲 1、match all GET /_search { "query": { "match_all": {} } } 2、match GET /_search { "query": { "match": { "title": "my elasticsearch article" }} } 3
阅读全文
摘要:课程大纲 1、filter与query示例 PUT /company/employee/2 { "address": { "country": "china", "province": "jiangsu", "city": "nanjing" }, "name": "tom", "age": 30,
阅读全文
摘要:课程大纲 1、一个例子让你明白什么是Query DSL GET /_search { "query": { "match_all": {} } } 2、Query DSL的基本语法 { QUERY_NAME: { ARGUMENT: VALUE, ARGUMENT: VALUE,... } } {
阅读全文
摘要:课程大纲 1、search api的基本语法 GET /search {} GET /index1,index2/type1,type2/search {} GET /_search { "from": 0, "size": 10 } 2、http协议中get是否可以带上request body H
阅读全文
摘要:课程大纲 1、multivalue field { "tags": [ "tag1", "tag2" ]} 建立索引时与string是一样的,数据类型不能混 2、empty field null,[],[null] 3、object field PUT /company/employee/1 { "
阅读全文
摘要:1、核心的数据类型 string byte,short,integer,long float,double boolean date 2、dynamic mapping 根据field的值,对值的类型进行推断,比如 true 或者 false 就会推断成 boolean类型 true or fals
阅读全文
摘要:1、如何建立索引 analyzed:可以被分次 not_analyzed:不可以被分次 no:不可以被搜索到 2、修改mapping 只能创建index时手动建立mapping,或者新增field mapping,但是不能update field mapping PUT /website { "ma
阅读全文
摘要:(1)往es里面直接插入数据,es会自动建立索引,同时建立type以及对应的mapping (2)mapping中就自动定义了每个field的数据类型 (3)不同的数据类型(比如说text和date),可能有的是exact value,有的是full text (4)exact value,在建立倒
阅读全文
摘要:1、query string分词 query string必须以和index建立时相同的analyzer进行分词 query string对exact value和full text的区别对待 date:exact value _all:full text 比如我们有一个document,其中有一个
阅读全文
摘要:1、什么是分词器 切分词语,normalization(提升recall召回率) 给你一段句子,然后将这段句子拆分成一个一个的单个的单词,同时对每个单词进行normalization(时态转换,单复数转换),分瓷器 recall,召回率:搜索的时候,增加能够搜索到的结果的数量 character f
阅读全文
摘要:1、exact value 必须要精确匹配才可以搜索出来 2017-01-01,exact value,搜索的时候,必须输入2017-01-01,才能搜索出来 如果你输入一个01,是搜索不出来的 2、full text 类似模糊匹配 (1)缩写 vs. 全程:cn vs. china (2)格式转化
阅读全文
摘要:doc1:I really liked my small dogs, and I think my mom also liked them. doc2:He never liked any dogs, so I hope that my mom will not expect me to liked
阅读全文
摘要:1、query string基础语法 GET /test_index/test_type/_search?q=test_field:test GET /test_index/test_type/_search?q=+test_field:test GET /test_index/test_type/
阅读全文
摘要:插入几条数据,让es自动为我们建立一个索引 PUT /website/article/1 { "post_date": "2017-01-01", "title": "my first article", "content": "this is my first article in this we
阅读全文
摘要:课程大纲 1、讲解如何使用es进行分页搜索的语法 size,from GET /_search?size=10 GET /_search?size=10&from=0 GET /_search?size=10&from=20 分页的上机实验 GET /test_index/test_type/_se
阅读全文
摘要:课程大纲 1、multi-index和multi-type搜索模式 告诉你如何一次性搜索多个index和多个type下的数据 /_search:所有索引,所有type下的所有数据都搜索出来 /index1/_search:指定一个index,搜索其下所有type的数据 /index1,index2/
阅读全文
摘要:课程大纲 1、我们如果发出一个搜索请求的话,会拿到一堆搜索结果,本节课,我们来讲解一下,这个搜索结果里的各种数据,都代表了什么含义 2、我们来讲解一下,搜索的timeout机制,底层的原理,画图讲解 GET /_search { "took": 6, "timed_out": false, "_sh
阅读全文
摘要:课程大纲 bulk api奇特的json格式 {"action": {"meta"}}\n {"data"}\n {"action": {"meta"}}\n {"data"}\n [{ "action": { }, "data": { } }] 1、bulk中的每个操作都可能要转发到不同的node
阅读全文
摘要:1、客户端发送请求到任意一个node,成为coordinate node 2、coordinate node对document进行路由,将请求转发到对应的node,此时会使用round-robin随机轮询算法,在primary shard以及其所有replica中随机选择一个,让读请求负载均衡 3、
阅读全文
摘要:(1)consistency,one(primary shard),all(all shard),quorum(default) 我们在发送任何一个增删改操作的时候,比如说put /index/type/id,都可以带上一个consistency参数,指明我们想要的写一致性是什么? put /ind
阅读全文
摘要:(1)客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点) (2)coordinating node,对document进行路由,将请求转发给对应的node(有primary shard) (3)实际的node上的primary shard处理请求,然后
阅读全文
摘要:(1)document路由到shard上是什么意思? (2)路由算法:shard = hash(routing) % number_of_primary_shards 举个例子,一个index有3个primary shard,P0,P1,P2 每次增删改查一个document的时候,都会带过来一个r
阅读全文
摘要:1、阶段性总结 1~8讲:快速入门了一下,最基本的原理,最基本的操作 9~13讲:在入门之后,对ES的分布式的基本原理,进行了相对深入一些的剖析 14~27讲:围绕着document这个东西,进行操作,进行讲解和分析 2、什么是distributed document store 到目前为止,你觉得
阅读全文
摘要:课程大纲 1、bulk语法 POST /_bulk { "delete": { "_index": "test_index", "_type": "test_type", "_id": "3" }} { "create": { "_index": "test_index", "_type": "te
阅读全文
摘要:1、批量查询的好处 就是一条一条的查询,比如说要查询100条数据,那么就要发送100次网络请求,这个开销还是很大的 如果进行批量查询的话,查询100条数据,就只要发送1次网络请求,网络请求的性能开销缩减100倍 2、mget的语法 (1)一条一条的查询 GET /test_index/test_ty
阅读全文
摘要:课程大纲 (1)partial update内置乐观锁并发控制 (2)retry_on_conflict (3)_version post /index/type/id/_update?retry_on_conflict=5&version=6
阅读全文
摘要:es,其实是有个内置的脚本支持的,可以基于groovy脚本实现各种各样的复杂操作 基于groovy脚本,如何执行partial update es scripting module,我们会在高手进阶篇去讲解,这里就只是初步讲解一下 PUT /test_index/test_type/11 { "nu
阅读全文
摘要:课程大纲 1、什么是partial update? PUT /index/type/id,创建文档&替换文档,就是一样的语法 一般对应到应用程序中,每次的执行流程基本是这样的: (1)应用程序先发起一个get请求,获取到document,展示到前台界面,供用户查看和修改 (2)用户在前台界面修改数据
阅读全文
摘要:课程大纲 1、上机动手实战演练基于external version进行乐观锁并发控制 external version es提供了一个feature,就是说,你可以不用它提供的内部_version版本号来进行并发控制,可以基于你自己维护的一个版本号来进行并发控制。举个列子,加入你的数据在mysql里
阅读全文
摘要:1、上机动手实战演练基于_version进行乐观锁并发控制 (1)先构造一条数据出来 PUT /test_index/test_type/7 { "test_field": "test test" } (2)模拟两个客户端,都获取到了同一条数据 GET test_index/test_type/7
阅读全文
摘要:1、图解Elasticsearch内部如何基于_version进行乐观锁并发控制 (1)_version元数据 PUT /test_index/test_type/6 { "test_field": "test test" } { "_index": "test_index", "_type": "
阅读全文
摘要:课程大纲 1、深度图解剖析悲观锁与乐观锁两种并发控制方案
阅读全文
摘要:课程大纲 1、深度图解剖析Elasticsearch并发冲突问题
阅读全文
摘要:1、document的全量替换 2、document的强制创建 3、document的删除 1、document的全量替换 (1)语法与创建文档是一样的,如果document id不存在,那么就是创建;如果document id已经存在,那么就是全量替换操作,替换document的json串内容 (
阅读全文
摘要:1、_source元数据 put /test_index/test_type/1 { "test_field1": "test field1", "test_field2": "test field2" } get /test_index/test_type/1 { "_index": "test_
阅读全文
摘要:1、手动指定document id 2、自动生成document id 1、手动指定document id (1)根据应用情况来说,是否满足手动指定document id的前提: 一般来说,是从某些其他的系统中,导入一些数据到es时,会采取这种方式,就是使用系统中已有数据的唯一标识,作为es中doc
阅读全文
摘要:1、_index元数据 2、_type元数据 3、_id元数据 { "_index": "test_index", "_type": "test_type", "_id": "1", "_version": 1, "found": true, "_source": { "test_content":
阅读全文
摘要:课程大纲 1、图解Elasticsearch容错机制:master选举,replica容错,数据恢复 (1)9 shard,3 node (2)master node宕机,自动master选举,red (3)replica容错:新master将replica提升为primary shard,yell
阅读全文
摘要:1、图解横向扩容过程,如何超出扩容极限,以及如何提升容错性 (1)primary&replica自动负载均衡,6个shard,3 primary,3 replica (2)每个node有更少的shard,IO/CPU/Memory资源给每个shard分配更多,每个shard性能更好 (3)扩容的极限
阅读全文
摘要:课程大纲 1、图解2个node环境下replica shard是如何分配的 (1)replica shard分配:3个primary shard,3个replica shard,1 node (2)primary > replica同步 (3)读请求:primary/replica
阅读全文
摘要:1、shard&replica机制再次梳理 2、图解单node环境下创建index是什么样子的 1、shard&replica机制再次梳理 (1)index包含多个shard (2)每个shard都是一个最小工作单元,承载部分数据,lucene实例,完整的建立索引和处理请求的能力 (3)增减节点时,
阅读全文
摘要:课程大纲 1、Elasticsearch对复杂分布式机制的透明隐藏特性 2、Elasticsearch的垂直扩容与水平扩容 3、增减或减少节点时的数据rebalance 4、master节点 5、节点对等的分布式架构 1、Elasticsearch对复杂分布式机制的透明隐藏特性 Elasticsea
阅读全文
摘要:第一个分析需求:计算每个tag下的商品数量 GET /ecommerce/product/_search { "aggs": { "group_by_tags": { "terms": { "field": "tags" } } } } 将文本field的fielddata属性设置为true PUT
阅读全文
摘要:1、query string search 2、query DSL 3、query filter 4、full-text search 5、phrase search 6、highlight search 把英文翻译成中文,让我觉得很别扭,term,词项 1、query string search
阅读全文
摘要:1、document数据格式 2、电商网站商品管理案例:背景介绍 3、简单的集群管理 4、商品的CRUD操作(document CRUD操作) 1、document数据格式 面向文档的搜索分析引擎 (1)应用系统的数据结构都是面向对象的,复杂的 (2)对象数据存储到数据库中,只能拆解开来,变为扁平的
阅读全文
摘要:课程大纲 1、lucene和elasticsearch的前世今生 2、elasticsearch的核心概念 3、elasticsearch核心概念 vs. 数据库核心概念 1、lucene和elasticsearch的前世今生 lucene,最先进、功能最强大的搜索库,直接基于lucene开发,非常
阅读全文
摘要:1、Elasticsearch的功能,干什么的 2、Elasticsearch的适用场景,能在什么地方发挥作用 3、Elasticsearch的特点,跟其他类似的东西不同的地方在哪里 1、Elasticsearch的功能 (1)分布式的搜索引擎和数据分析引擎 搜索:百度,网站的站内搜索,IT系统的检
阅读全文
摘要:大白话、什么是Elasticsearch Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统 1、什么是搜索? 2、如果用数据库做搜索会怎么样? 3、什么是全文检索、倒排索引和Lucene? 4、什么是Elasticsearch? 1、什么是搜索? 百度:我们比如说想找寻任何
阅读全文
摘要:3、课程内容介绍 (1)核心知识篇 课程特点 (1)使用最新Elasticsearch 5.2版本讲解,市面上的书籍和视频几乎都停留在2.x版本 (2)深入浅出ES核心工作原理,全部手工画图讲解,完全不同于市面上已有视频的PPT讲解 (3)涵盖Elasticsearch所有核心知识点,系统化,体系完
阅读全文