sphinx索引分析——文件格式和字典是double array trie 检索树,索引存储 – 多路归并排序,文档id压缩 – Variable Byte Coding
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,去 ...
随机推荐
- python读取和写入csv文件
读取csv文件: def readCsv(): rows=[] with file(r'E:\py\py01\Data\system.csv','rb') as f: reads=csv.reader ...
- IOS监听屏幕状态
一.定义两个宏 //锁屏通知 #define NotificationOff CFSTR("com.apple.springboard.lockcomplete") //解 ...
- 95、Jenkins部署.net持续集成自动化测试环境
##目录 1. 安装Jenkins 1. 配置Jenkins 1. 自动编译 1. 自动部署 1. 自动测试 环境介绍: web服务器机器:192.168.1.7 svn服务器:192.168.1.5 ...
- webpack的简单使用
今天简单的说一下webpack的使用. 打开cmd(也可以用别的看个人爱好) 打开你要创建项目的文件夹: webpack安装: 1.全局安装webpack:$npm install webpack - ...
- The communication of Linux Server and Localtion
当用Secure CRT远程登录服务器时,若建立本地与服务器间文件自由传输的机制,我们就可以实现远程办公.具体方法如下: 1. 确定远程服务器的IP.可以通过Secure CRT进行远程登录. 2.在 ...
- UIToolbar 莫名黑线条 隐藏办法
- (void)awakeFromNib { [self setBackgroundImage:[UIImage new]forToolbarPosition:UIBarPositionAny bar ...
- hihoCoder 1426 : What a Ridiculous Election(总统夶选)
hihoCoder #1426 : What a Ridiculous Election(总统夶选) 时间限制:1000ms 单点时限:1000ms 内存限制:256MB Description - ...
- RequireJS 快速入门
说明:本文只提供快速入门内容,方便快速进入实战状态.更高级的配置,请参考官网文档. 当初之所以使用 RequireJS 等工具,是因为想提高js的加载速度,避免不必要的堵塞.但通过一段时间的使用, ...
- 【学习笔记】在原生javascript中使用ActiveX和插件
什么是插件 现在的浏览器提供了大量的内置功能,但仍然有一些工作无法完成,如播放音频和视频.插件及其扩展浏览器功能就尤为重要. 插件是可下载的应用程序,可以插入到浏览器中,现在有很多不同的插件,常用的有 ...
- VS学习
7.9 今天打开老师给的俄罗斯方块的程序,硬是跑不出来.已经遇到了这几个问题 [1]在项目属性里面C++目录中修改头文件和库函数的绝对路径(基础知识刚学会) [2]errorC1083 SDKDDKe ...