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,去 ...
随机推荐
- [课程设计]Scrum 3.5 多鱼点餐系统开发进度(修复Bug&美化页面)
Scrum 3.5 多鱼点餐系统开发进度(修复Bug&美化页面) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅 ...
- AngularJS中使用$resource
这个服务可以创建一个资源对象,我们可以用它非常方便地同支持RESTful的服务端数据源进行交互,当同支持RESTful的数据模型一起工作时,它就派上用场了. REST是Representat ...
- Git使用指南(1)——Git配置命令
配置用户信息 git config --global user.name bongxin git config --global user.email bongxin@yeah.net 配置文本编辑器 ...
- android dialog
/** * @Title MenuTest.java * @package com.example.standardview * @since * @version 1.0.0 * @author V ...
- ORACLE常用SQL优化hint语句
在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量, ...
- EF CodeFirst 关系配置
自从开始学习asp.net mvc采用code first以来,关系配置就没有搞清楚过!(⊙﹏⊙)b 笔记之前先感谢以下文章和博主,对他们表示崇拜,由浅入深.举例恰当.拨云见日.茅塞顿开,还有什么词, ...
- destoon系统中get_maincat的用法及解释
get_maincat函数的用法, 如get_maincat(0, $mid, 1),其中第一.二.三个参数分别表示什么? 第一个参数代表parentid 第二个参数代表所有的分类 第三个参数 代表 ...
- 【转载】动态新增svg节点
原文地址:http://blog.csdn.net/tomatomas/article/details/50442497 原文作者:番茄大圣 创建svg节点时,要使用createElementNS函数 ...
- 原创:Equinox OSGi应用嵌入Jersey框架搭建REST服务
一.环境 eclipse版本:eclipse-luna 4.4 jre版本:1.8 二.Equinox OSGi应用嵌入Jersey框架搭建REST服务 1.新建插件工程HelloWebOSGI a. ...
- IaaS/PaaS/SaaS
如果你是一个网站站长,想要建立一个网站.不采用云服务,你所需要的投入大概是:买服务器,安装服务器软件,编写网站程序.现在你追随潮流,采用流行的云计算,如果你采用IaaS服务,那么意味着你就不用自己买服 ...