elasticsearch搜索引擎开发实战 pdf,elasticsearch索引结构

  elasticsearch搜索引擎开发实战 pdf,elasticsearch索引结构

  

目录

发动机的实现结构发动机类的方法:如指数方法的实现:总结

 

  

engine的实现结构

弹性搜索对于索引中的数据操作如读写得到等接口都封装在发动机中,同时发动机还封装了索引的读写控制,如流量、错误处理等1000发动机。是离全文搜索引擎最近的一部分。

 

  发动机的实现结构如下所示:

  发动机接口有三个实现类,主要逻辑都在国际语言中。

  影子引擎之实现了发动机接口的部分读方法,主要用于对于索引的读操作。

  鲨鱼引擎在国际语言的基础上实现了恢复方法,它的功能跟国际语言基本相同只是它的恢复过程有区别,不会对超越对数和指数进行快照存储。

  发动机类定义了一些指数操作的主要方法和内部类,方法如创建,索引等。内部类如索引,删除等。这些方法的实现是在子类中,这些方法的参数是这些内部类。

  

Engine类的方法:

公共抽象无效创建(创建创建)抛出引擎异常公共抽象空的索引(索引索引)引发引擎异常公共抽象无效删除(删除删除)抛出引擎异常公共抽象void delete(DeleteByQuery delete)引发引擎异常这些抽象方法都在子类中实现,它们的参数都是一类,这些都是发动机的内部类,这些内部类类似于实体类,没有相关逻辑只是由很多提出申请及得到方法构成。如创造和索引都继承自索引操作,它们所有信息都存储到索引操作的相关田中,索引操作如下所示:

 

  公共静态抽象类索引操作实现操作{私有最终文档映射器文档映射器;私有最终期限用户界面设计(User Interface Design的缩写)私有最终parsed文档文档;私人长版;私有最终版本类型版本类型;私人最终起源起源;私人决赛布尔值可以有重复项;私有最终长开始时间;私有长结束时间………}无论是索引还是创建,相关数据和配置都在文件中,根据文件和文档映射器就能够获取本次操作的所有信息,另外的一些字段如版本,uid都是在类初始化时构建。这样传给实际方法的是一个类,在方法内部根据需求获取到相应的数据

  

如index方法的实现:

私有void innerIndex(索引索引)抛出io异常{同步(脏锁(索引。uid())){ final long当前版本;版本值版本值=版本映射。getunderlock(索引。uid().bytes());if(版本值==null){当前版本=loadcurrentversionpromindex(索引。uid());} else { if(引擎配置。isenablegcdeletes()amp;ampversion值删除()amp安培(引擎配置

 

  .getThreadPool().estimatedTimeInMillis() - versionValue.time()) > engineConfig.getGcDeletesInMillis()) { currentVersion = Versions.NOT_FOUND; // deleted, and GC } else { currentVersion = versionValue.version(); } } long updatedVersion; long expectedVersion = index.version(); if (index.versionType().isVersionConflictForWrites(currentVersion, expectedVersion)) { if (index.origin() == Operation.Origin.RECOVERY) { return; } else { throw new VersionConflictEngineException(shardId, index.type(), index.id(), currentVersion, expectedVersion); } } updatedVersion = index.versionType().updateVersion(currentVersion, expectedVersion); index.updateVersion(updatedVersion); if (currentVersion == Versions.NOT_FOUND) { // document does not exists, we can optimize for create index.created(true); if (index.docs().size() > 1) { indexWriter.addDocuments(index.docs(), index.analyzer()); } else { indexWriter.addDocument(index.docs().get(0), index.analyzer()); } } else { if (versionValue != null) { index.created(versionValue.delete()); // we have a delete which is not GCed... } if (index.docs().size() > 1) { indexWriter.updateDocuments(index.uid(), index.docs(), index.analyzer());//获取IndexOperation中doc中字段更新索引 } else { indexWriter.updateDocument(index.uid(), index.docs().get(0), index.analyzer()); } } Translog.Location translogLocation = translog.add(new Translog.Index(index));//写translog versionMap.putUnderLock(index.uid().bytes(), new VersionValue(updatedVersion, translogLocation)); indexingService.postIndexUnderLock(index); } }这就是Engine中create、index这些方法的实现方式。后面分析索引过程中会有更加详细说明。Engine中还有获取索引状态(元数据)及索引操作的方法如merge。这些方法也是在子类中调用lucene的相关接口,跟create,index,get很类似。因为没有深入Engine的方法实现,因此这里的分析比较简单,后面的分析会涉及这里面很多方法。

  

 

  

总结

这里只是从结构上对indexEngine进行了简单说明,它里面的方法是es对lucene索引操作方法的封装,只是增加了一下处理方面的逻辑如写translog,异常处理等。它的操作对象是shard,es所有对shard的写操作都是通过Engine来实现,后面的分析会有所体现。

 

  以上就是elasticsearch索引index之engine读写控制结构实现的详细内容,更多关于elasticsearch索引index engine读写控制的资料请关注盛行IT其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • php读取pdf数据,php pdf读取
  • php读取pdf数据,php pdf读取,PHP中使用mpdf 导出PDF文件的实现方法
  • kotlon协程,深入理解kotlin协程pdf,一文彻底搞懂Kotlin中的协程
  • 深入解析C#(第4版),深入解析css pdf,深入解析contentWindow, contentDocument
  • java 反射机制原理与用法详解视频,java 反射机制原理与用法详解pdf
  • java 反射机制原理与用法详解视频,java 反射机制原理与用法详解pdf,Java 反射机制原理与用法详解
  • ,,Java使用iTextPDF生成PDF文件的实现方法
  • ,,Python利用PyMuPDF实现PDF文件处理
  • 漫画算法小灰的算法之旅pdf,漫画算法2-小灰的算法进阶
  • devops和自动化运维实践 PDF,devops思想在运维方面的具体实践
  • pdf如何去除水印,pdf去水印的三种方法
  • 把a4的内容打印成a3小册子,a4的pdf文档如何打印成a3
  • nlp自然语言处理入门pdf,精通python自然语言处理 pdf
  • 容器docker基本操作,每天5分钟玩转docker容器技术 pdf
  • sklearn中文手册pdf下载,sklearn库模块及函数
  • 留言与评论(共有 条评论)
       
    验证码: