精通ElasticSearch
文章平均质量分 82
从使用到ES源码
上海第一深情Enoch
精通java生态圈源码
展开
-
ES源码五:写操作流程(从Es到底层Luence,全网最细的一篇,全是硬货)
这里又创建了一个ReroutePhase(从这个类也大概知道,它要重写路由,为什么要重新路由,因为当前节点不一定是主分片节点),然后调用了它的run方法,当然最终也是会执行到doRun方法。同样,这个dispatchedShardOperationOnPrimary依旧是个抽象方法,最终会被TransportShardBulkAction实现,兜兜转转又回来了。这里创建了BulkOperation,并且会调用它的run方法, **它的run方法最终会跑到BulkOperation.doRun方法中**原创 2024-04-22 20:16:39 · 1473 阅读 · 2 评论 -
ES源码六:Get操作流程
todo。原创 2024-04-17 00:00:44 · 112 阅读 · 0 评论 -
ES源码四:网络通信层流程
基于HTTP协议的REST服务端基于TCP实现的PRC框架。原创 2024-04-16 23:58:59 · 316 阅读 · 0 评论 -
ES源码三:Master选举过程
todo。原创 2024-04-16 23:58:02 · 107 阅读 · 0 评论 -
ES源码二:集群启动过程
通过这个类,系统进行了命令行参数解析与配置加载。通过Bootstrap类进行了资源检查与本地资源初始化。最后实例化了Node类,其负责加载各个模块和插件、创建线程池、创建 keepalive 线程等工作,在 Node.start 方法中获取了各个服务的实例并且调用它们的 start 方法。Guice。原创 2024-04-16 23:51:45 · 1856 阅读 · 0 评论 -
ES源码一:全网最细的ES源码环境搭建
网上很多一坨,我这个是100%能搭建起来的,follow me。原创 2024-04-14 16:38:30 · 505 阅读 · 0 评论 -
ES入门十一:正排索引和倒排索引
ES 中的倒排索引主要分为 3 个部分:Term Index、Term Dictionary 和 Posting List。Term Index 是 Term Dictionary 的索引,使用它可以快速判断一个 Term 是否存在,并且可以找到这个 Term 在 Term Dictionary 存储的块地址。Term Index 使用了 FST 来实现,其有着小巧且复杂度低的特点。原创 2024-04-08 15:47:39 · 1276 阅读 · 0 评论 -
ES入门十二:相关性评分
本文为你介绍了数据相关性的原理,我们从自己设计相关性算分模型出发,学习了经典的 TF-IDF 、BM25 算分模型。TF 是词项在文档中出现的频率,代表了这个词项对文档的重要程度。其中 Lucene 的 TF 实现为 t 在文档 d 中出现次数的平方根。DF 词项在整个语料库中出现的频率,DF 越大词项的重要程度也就越低。IDF 也叫逆文档频率,代表了词项在语料库中的稀有程度,其在计算得分时作为 TF 的权重。原创 2024-04-08 15:05:26 · 1397 阅读 · 0 评论 -
ES入门十五:分页的三驾马车【from+size、search after、scroll api】
从数据集中获取数据时分页是绕不开的操作,一下子从数据集中获取过多的数据可能会造成系统抖动、占用带宽等问题。特别是进行全文搜索时,用户只关心相关性最高的那个几个结果,从系统中拉取过多的数据等于浪费资源。这3种方式的分页操作都有其优缺点,适合不同的场合使用。今天我们就来学习这3种分页方式,但除了学习这3种分页方式外,我们还会介绍ES新引入的特性:Point In Time,看看如何使用Point In Time+search after的方式来代替scroll Api进行大量数据的导出。原创 2024-04-08 08:05:22 · 1306 阅读 · 0 评论 -
ES入门十四:分词器
除了使用内置的分词器外,我们还可以通过组合 Tokenizer、Filters、Character Filters 来自定义分词器。"char_filter": { # 自定义char_filter"mappings": ["& => and"] # 将 '&' 转换为 'and'},"filter": { # 自定义 filter"stopwords": ["an"] # 设置 "an" 为停用词},"analyzer": { # 自定义分词器为 custom_analyzer。原创 2024-04-07 23:43:19 · 785 阅读 · 2 评论 -
ES入门八:Mapping的详细讲解
前面我们提到最好不要用Dynamic Mapping来生成Mapping,但是如果Mapping拥有的字段非常多的时候,自定义Mapping是非常痛苦的并且容易出错。那有没有办法减轻一下我们的工作量哪?我们可以把JSON对象直接写入,利用Dynamic Mapping的特性帮我们生成一个初步可用的Mapping,然后我们修改这个 Mapping来直到满足我们的需求。创建临时索引,并写入业务数据获取这个临时索引的Mapping根据业务场景,完善这个Mapping。如对某些字段定义的分词器等。原创 2024-03-05 22:05:42 · 1667 阅读 · 0 评论 -
ES入门十:关系模型的实现:嵌套类型和父子文档
"book_comments_relation": { # 定义字段名字"type": "join", # 此字段为 join 类型"relations": { # 声明 Parent / Child 的关系"book": "comment" # book 是 Parent 的名称,comment 是 Child 的名称},"number_of_shards": 3, # 定义 3 个主分片。原创 2024-03-05 21:44:08 · 621 阅读 · 0 评论 -
ES入门七:索引管理Api的使用
在创建索引的时候,可以设置索引的Mapping。其示例如下:如上示例,使用“mapping”字段可以指定创建索引时的Mapping设置需要记住,在Mapping中定义好的字段时不能修改的,如果修改将会返回404。原创 2024-03-05 21:19:54 · 1198 阅读 · 0 评论 -
ES入门六:Suggesters Api实践
都是负担在很多app上,当我们输入某些内容时候,它会立即做一些补全操作,如果我想实现上述的需求,我们就可以使用ES提供的Suggesters Api。那Suggesters是如何做到的那?原创 2024-03-04 19:32:07 · 1030 阅读 · 0 评论 -
ES入门一:基础概念
每个文档都有一个或者多个字段,例如books索引指定了书本有2个字段book_id和name两个字段,其实就是Json中的key,常见的类型有keyword、text、数字类型(integer、long、float、double等)、对象存储。分片的概念其实很好理解,试想一下如果家里的书多到一个箱子放不下,是不是要找另外一个箱子来装,这些书好比就是海量的数据,一个机器放不下,就放到多个机器上来存储。如上图,索引有3个分片,主分片分别是P1、P2、P3,队友的副本分别是R1、R2、R3,仔细看。原创 2024-03-04 18:04:33 · 1357 阅读 · 0 评论 -
ES入门五:组合查询
使用Constant Score可以将query转换为filter,可以忽略相关性算法的环节,并且filter可以有效利用缓存,从而提高查询的性能。如上示例,我们在查询书名中出现“linux”或者书本简介中出现“kernel“的文档,而最终返回的相关性评分将以匹配“linux”或者匹配“kernel”中最大的那个评分为准。原创 2024-03-04 18:08:07 · 1185 阅读 · 0 评论 -
ES入门四:Term Query Api实践
Term Query Api返回在指定字段中准确包含了检索内容的文档,你可以使用此Api去查询精确值的字段,如书本Id、价格等,其示例如下:!返回结果:!原创 2024-03-04 18:07:30 · 1307 阅读 · 0 评论 -
ES入门三:全文搜索Api实践
# match(匹配查询)匹配查询可以处理全文本、精确字段(日期、数字等)!返回结果:!从结果可以看到 匹配到了id为3和为1的文档,这两个文档都含有“linux”或者“architecture”原创 2024-03-04 18:06:40 · 975 阅读 · 0 评论 -
ES入门二:文档的基本操作
如果成功,返回的是http状态码为200,如果文档不存在则http状态码为404,并且found字段为false。如果说发现一些书籍的信息有误,需要进行修改,ES提供了update Api来更新信息,我们可以通过这个接口来更新书本的信息。如上示例,如果文档存在则删除成功,“result”为“deleted”,如果文档不存在,则返回http的状态码为404。上图中更新了文档2的name和intro字段,如返回结果所示,版本号为增加,“result”字段为updated。原创 2024-03-04 18:05:36 · 775 阅读 · 0 评论