内容简介:bleve是一个全文搜索引擎,golang里对标java的lucene,但是在结果封装等方面又借鉴了Elasticsearch很多设计,不得不说,不背负历史包袱更方便拨丝抽茧。本章开始我们尝试分析bleve的源码,个人是不喜欢读他人源码的,1.思想受限。2.破坏自己的风格。当然最主要的是读代码比写代码难 -_-! . 如果你能很好很快的hold住一份复杂代码,你的功底至少比作者高出1个level才实际。不过这不影响咱们读代码。懂不懂不重要,重要的是读没读是吧哈哈。废话不多说了,直接上一个图,然后嫖一下官网
bleve是一个全文搜索引擎,golang里对标 java 的lucene,但是在结果封装等方面又借鉴了Elasticsearch很多设计,不得不说,不背负历史包袱更方便拨丝抽茧。
本章开始我们尝试分析bleve的源码,个人是不喜欢读他人源码的,1.思想受限。2.破坏自己的风格。当然最主要的是读代码比写代码难 -_-! . 如果你能很好很快的hold住一份复杂代码,你的功底至少比作者高出1个level才实际。不过这不影响咱们读代码。懂不懂不重要,重要的是读没读是吧哈哈。
废话不多说了,直接上一个图,然后嫖一下官网文档,本章交差
image
上图是bleve的目录结构。golang有着丧心病狂的包引用洁癖,所以 go 语言的程序分层相当讲究自上而下,这样也很方便阅读。
bleve
是top-level 的package,他的存在是更好的调用,包装下层package。
Analysis
分析器的包,将文本打成term,这个我比较熟,这个包一般不会调用其他包里面的内容,比较独立.
Analyzers
analyzers 就是一个完整的分词器,顺路插一句,bleve的分词器插件比起lucene相对简单不少,一个analyzers里面一般有一个Tokenizer,用于词语片段化,多个TokenFilter。用于过滤转换。
ByteArrayConverters
故名思议,byte数组转换,好吧我实话实说,写这个文章的此时此刻,我还没看过代码这么细的地方。so我感觉不到这个玩意的存在。
DateTime Parsers
时间日期的解析
Language
这个包实现了多种语言的分析器,but没有中文的,lucene里面包了一个smartcn的分词器,话说中文分词器依赖词典模型,反而还是以插件的形式比较稳妥。对于我来说一个standard一个keywords分词器就可以随便浪了,不在乎。
Token Filters
词干抽取的过滤器,停用词呀啥的。
CharFilters
字符过滤,没什么好说的,写转换,全半角转换,啥的。
Token Maps
不知何物,貌似从一个文件读取一个词或短语,还吃了bool表达式。
Tokenizers
分词器,你如果自己写分词器主要是写这里
Document
文档包包含与bleve文档和字段相关的代码。一个文档包含多个字段,一个字段包含多个term。这是bleve中的索引单元。
Index
index包是将索引数据写入到磁盘的功能。方便search。
Store
存储包,是一个文档持久化的 工具 包,实现了kv接口,可以挂载多个kv数据库。如leveldb rockdb啥的。
upside_down
upside_down包是倒排索引实现。它可以使用任何存储实现。它包含关于如何编码单个行的所有细节。
HTTP
一个简易的api服务,作者的意思是是可用可不用。json协议。
Registry
通过名称提供一些注册服务,类似cache。比如分词器等,应该算是一种 设计模式 吧。这还有助于序列化索引映射并将它们与索引一起持久化。
Search
搜索包的代码主要是实现搜索方法,这个包依赖index包的接口,然后就不依赖其他了。
Collectors
收集器包负责从所有结果中收集所需的结果并打分。用堆排序,选取topN,
Facets
负责从结果集中收集数据,然后构建
Highlight
高亮包,负责在返回结果中命中高亮文本。没什么好说的
Scorers
Scorers 负责堆搜索结果打分,这个打分可能是中间结果,Collectors来调用,
Searchers
这个包里面包含了实际的搜索实现。后面争取我们可以细致分析
Utils
这个包包含了所有的命令行实现,在新版本里面是cmd包。
实际上你能发现,目前包结构和当前这份文档对不上了。打开时光机回到项目初生的时候看看
image
果然这老头已变初心
以上所述就是小编给大家介绍的《Bleve目录结构》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Learning Vue.js 2
Olga Filipova / Packt Publishing / 2017-1-5 / USD 41.99
About This Book Learn how to propagate DOM changes across the website without writing extensive jQuery callbacks code.Learn how to achieve reactivity and easily compose views with Vue.js and unders......一起来看看 《Learning Vue.js 2》 这本书的介绍吧!