1 概述
这是基于开源的sphinx全文检索引擎的架构代码分析,本篇主要描述index索引服务的分析。当前分析的版本 sphinx-2.0.4
2 index 功能
3 文件表
4 索引文件结构
4.1 spa 文件
存储文档属性,在extern文档信息存储模式下使用。
item | item | item | item | item |
---|---|---|---|---|
docid | attr0 | attr1 | attr mva(spm file position) | … |
item | item | item | item | item | item | item |
---|---|---|---|---|---|---|
attr0 min | attr1 min | … | attr0 max | attr1 max | attr mva max | … |
4.2 spi 文件
存储词列表,词id和指向spd文件的指针。
- wordid 采用crc32编码
- 每64个word插入一个检查点,重新开始存储wordid和spd文件偏移的差值
- 保存doc的计数值,hit的计数值
item | item | item | item |
---|---|---|---|
wordid(crc32)或vlb | spd文件偏移的差值 | doc的计数值 | hit的计数值 |
item | item | item |
---|---|---|
checkpoint1 sWord len | sWord | 在文件内的 offset |
4.3 spd 文件
存储每个词id可匹配的文档id列表。
item | item | item | item |
---|---|---|---|
docid vlb | hit count | hit field | hit position |
item | item | item | item |
---|---|---|---|
docid vlb | hit count | field mask | hit file(spp) position 差值 |
4.4 sph 文件
存储索引头信息。
item0 | item1 | item2 | item3 | item4 |
---|---|---|---|---|
version | bits | docinfo mode | schema | min doc |
item5 | item6 | item7 | item8 | item 9 |
---|---|---|---|---|
ckpoint pos | ckpoint count | total doc | total bytes | index setting |
item10 | item 11 | item12 | item13 |
---|---|---|---|
tokenizer | dictionary | kill list | min max index |
4.5 spk 文件
存储kill-lists信息。
4.6 spm 文件
存储mva数据
- 分块存储
- 多路归并排序,创建spm文件
item | item | item |
---|---|---|
docid | A a0,a1,a2 … | B b0,b1,b2 … |
4.7 sps 文件
存储字符串属性
4.8 spp 文件
4.8.1 第一次扫描创建的命中文件(临时存储命中信息)
存储每个词的命中数。
- 文件内分块存储
- 块内同类递增排序,优先级为 wordid > docid > hitpos
- 在wordid,docid相等的条件下,hitpos差分存储
- 在wordid相等的条件下docid差分存储
- wordid差分存储
item | item | item | item | item |
---|---|---|---|---|
wordid0 | docid0 | pos0, pos1, pos2 … | hitcount | field mask |
docid1 | pos0, pos1, pos2 … | hitcount | field mask | |
docid2 | pos0, pos1, pos2 … | hitcount | field mask | |
wordid1 | docid0 | pos0, pos1, pos2 … | hitcount | field mask |
docid1 | pos0, pos1, pos2 … | hitcount | field mask | |
… | … | … | … | … |
4.8.2 最终创建的spp文件格式
当doc切换后存储的第一个是hit position, 后面存储的是差值。
item |
---|
hit position 差值 |
4.9 sps 文件
存储字符串属性数据。
sphinx索引分析——文件格式和字典是double array trie 检索树,索引存储 – 多路归并排序,文档id压缩 – Variable Byte Coding的更多相关文章
-
双数组字典树(Double Array Trie)
参考文献 1.双数组字典树(DATrie)详解及实现 2.小白详解Trie树 3.论文<基于双数组Trie树算法的字典改进和实现> DAT的基本内容介绍这里就不展开说了,从Trie过来的同 ...
-
sphinx 源码阅读之分词,压缩索引,倒排——单词对应的文档ID列表本质和lucene无异 也是外部排序再压缩 解压的时候需要全部扫描doc_ids列表偏移量相加获得最终的文档ID
转自:http://github.tiankonguse.com/blog/2014/12/03/sphinx-token-inverted-sort.html 外部排序 现在我们的背景是有16个已经 ...
-
double array trie 插入结点总结
双数组Trie树索引的可操作性研究.pdf 提示:任一状态点的移动,会影响其Trie树中父节点的base值的选择以及兄弟结点位置的变动,而兄弟结点的移动又须变更相应的子节点的check值. 设待插入的 ...
-
Double Array Trie 的Python实现
不多介绍,可自行Google,或者其它关键词: "datrie" 放代码链接: double_array_trie.py 因为也是一段学习代码,参考的文章都记在里面了,主要参考gi ...
-
Elasticsearch压缩索引——lucene倒排索引本质是列存储+使用嵌套文档可以大幅度提高压缩率
注意:由于是重复数据,词法不具有通用性!文章价值不大! 摘自:https://segmentfault.com/a/1190000002695169 Doc Values 会压缩存储重复的内容. 给定 ...
-
ES里设置索引中倒排列表仅仅存文档ID——采用docs存储后可以降低pos文件和cfs文件大小
index_options The index_options parameter controls what information is added to the inverted index, ...
-
Poseidon 系统是一个日志搜索平台——认证看链接ppt,本质是索引的倒排列表和原始日志数据都存在HDFS,而文档和倒排的元数据都在NOSQL里,同时针对单个filed都使用了独立索引,使用MR来索引和搜索
Poseidon 系统是一个日志搜索平台,可以在百万亿条.100PB 大小的日志数据中快速分析和检索.360 公司是一个安全公司,在追踪 APT(高级持续威胁)事件,经常需要在海量的历史日志数据中检索 ...
-
sphinx索引分析续
4.10 同义词文件/Synonym 同义词文件格式 from => to AT &T => AT&T AT & T => AT & T standa ...
-
Elasticsearch的索引模块(正排索引、倒排索引、索引分析模块Analyzer、索引和搜索、停用词、中文分词器)
正向索引的结构如下: “文档1”的ID > 单词1:出现次数,出现位置列表:单词2:出现次数,出现位置列表:…………. “文档2”的ID > 此文档出现的关键词列表. 一般是通过key,去 ...
随机推荐
-
使用VisualStudio进行单元测试之一
使用VisualStudio中的单元测试功能,可以很方便的创建单元测试项目.编写单元测试代码以及执行单元测试.而如何在VisualStudio中使用单元测试功能,就是本文和后面几篇想要说的了. ...
-
14.5.4 InnoDB File-Per-Table Tablespaces 每个表一个文件
14.5.4 InnoDB File-Per-Table Tablespaces 每个表一个文件 从历史上看, 所有的InnoDB 表和索引是存储在system 表空间, 这个整体的方法是针对机器专注 ...
-
Python教程百度网盘哪里有?
Python为我们提供了非常完善的基础代码库,覆盖了网络.文件.GUI.数据库.文本等大量内容,被形象地称作"内置电池(batteries included)".带你快速入门的Py ...
-
phpstudy如何安装景安ssl证书 window下apache服务器网站https访问
1. 下载景安免费证书 https://www.zzidc.com/help/helpDetail?id=555 2.文件解压上传至服务器,位置自己决定 3. 调整apache配置 景安原文链接:ht ...
-
Cookie Session 与Token
由于HTTP是一种无状态的协议,服务器端无法知道用户与客户端交互的状态,比如如果一个用于之前已经访问过该服务器,服务器无法知道该用户是第二次访问,Session和Cookie都是用来保存用户与后端服务 ...
-
javaScript之数组操作方法(一)
本篇文章主要总结了几个简单的数组操作方法.数组就是一组数据的集合,接下来我们就了解一下几种数组的操作方法. 1. join方法:把数组的所有元素放入一个字符串.举例如下: var arrJoin=[& ...
-
初学python之路-day14
一.带参装饰器 # 通常,装饰器为被装饰的函数添加新功能,需要外界的参数 # -- outer参数固定一个,就是func # -- inner参数固定同被装饰的函数,也不能添加新参数 # -- 可以借 ...
-
npm WARN build `npm build` called with no arguments. Did you mean to `npm run-script build`?
跑npm build结果如下: npm WARN build `npm build` called with no arguments. Did you mean to `npm run-script ...
-
mysql-cluster 环境安装&;配置
一.mysql-cluster 的介绍: 1.说心里话mysql-cluster这货性能上是不行的,之前一个同事测试了来的结果是8个主机组成的mysql-cluster性能 上搞不过一个单机的mysq ...
-
Excel VBA 操作 Word(入门篇)
原文地址 本文的对象是:有一定Excel VBA基础,对Word VBA还没有什么认识,想在Excel中通过VBA操作Word还有困难的人. 一.新建Word引用 需要首先创建一个对 Word A ...