sphinx索引部分源码续——过程:连接到CSphSource对应的sql数据源,通过fetch row取其中一行,然后解析出field,分词,获得wordhit,最后再加入到CSphSource的Hits里
2017-04-05 11:41
615 查看
后面就是初始化一些存储结构,其中重点说下缓存出来的几个临时文件分别的作用。结尾时tmp0的存储的是被上锁的Index,有些Index正在被查询使用 故上锁。tmp1,即对应将来生成的spp文件,存储词汇的位置信息,包含该词所在的文档ID,该词所在词典对应的ID,以及该词在本文档中的位置信息。 tmp2,即对应将来生成的spa文件存储的是文档信息,包含了DocID以及DocInfo信息。tmp7对应的是多值查询,感兴趣的可以度娘,这是一 种查询方式,这里不做过多解释
下面具体处理每一个Source取出的每一个文档,主要是通过这个IterateHitsNext实现的
具体到该函数可以看到,该函数主要是有两部分组成,即提取索引列(NextDocument),针对该索引列构建索引(BuildHits)
具体看一下NexDocument的操作,通过Sql.h中的API——sqlFetchRow,取出一条记录,验证该记录是否合法
将条记录按照Schema分成Feild部分,即需要构建索引的部分,以及Attribute部分,即排序需要用到的属性部分
提取出相关数据后,针对每一条需要索引的item开始构建索引,进入BuildHit函数,首先先初始化相关参数,准备分词器缓存
然后开始分词,分词的过程在这里不具体讲了,这不属于Sphinx的主要涉足领域,当我们把iField即要索引的字段放入分词器中依次解析,然后将分出的词赋值给sWord,将sWord的位置计算后赋值给ipos
将分词后的sWord去词典中查找它对应的词ID,这样我们就收集全了这个词的所有详细信息,创建一个类型为CSphWordHit类型的tHit,其中存储了该sWord所在的DocID,在词典中对应的词ID,以及在文档中词的位置信息Pos
处 理完该词后,如果是中文的话还会进一步去判断其是否有近义词出现,。。。,最后将所有的sWord的信息tHit都放入到m_dHits中去,形成我们的词 索引spp索引.
当该iField索引字段全部都索引完成后,在dHit中添加结束标记!
摘自:http://frankiewb.blog.51cto.com/8202664/1359897
具体到该函数可以看到,该函数主要是有两部分组成,即提取索引列(NextDocument),针对该索引列构建索引(BuildHits)
将条记录按照Schema分成Feild部分,即需要构建索引的部分,以及Attribute部分,即排序需要用到的属性部分
提取出相关数据后,针对每一条需要索引的item开始构建索引,进入BuildHit函数,首先先初始化相关参数,准备分词器缓存
然后开始分词,分词的过程在这里不具体讲了,这不属于Sphinx的主要涉足领域,当我们把iField即要索引的字段放入分词器中依次解析,然后将分出的词赋值给sWord,将sWord的位置计算后赋值给ipos
将分词后的sWord去词典中查找它对应的词ID,这样我们就收集全了这个词的所有详细信息,创建一个类型为CSphWordHit类型的tHit,其中存储了该sWord所在的DocID,在词典中对应的词ID,以及在文档中词的位置信息Pos
当该iField索引字段全部都索引完成后,在dHit中添加结束标记!
摘自:http://frankiewb.blog.51cto.com/8202664/1359897
相关文章推荐
- shinx索引部分源码分析——过程:连接到CSphSource对应的sql数据源,通过fetch row取其中一行,然后解析出field,分词,获得wordhit,最后再加入到CSphSource的Hits里
- sphinx 源码阅读之分词,压缩索引,倒排——单词对应的文档ID列表本质和lucene无异 也是外部排序再压缩 解压的时候需要全部扫描doc_ids列表偏移量相加获得最终的文档ID
- sphinx 源码阅读之分词,压缩索引,倒排——单词对应的文档ID列表本质和lucene无异 也是外部排序再压缩 解压的时候需要全部扫描doc_ids列表偏移量相加获得最终的文档ID
- MyBatis 源码解析:通过源码深入理解 SQL 的执行过程
- MyBatis 源码解析:通过源码深入理解 SQL 的执行过程
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 过程:先Edit,然后SetFieldValue,接着Update,最后MoveNext
- solr索引过程源码解析
- Lucene源码解析--索引创建过程
- 创建一个包,其中定义一个过程,可以查询得到编号为7900的员工的姓名ename、薪水sal、佣金comm、上司编号mgr (通过OUT类型的参数将结果返回并打印) (注意包有包头部分的声明和包体部分的
- Oracle中通过存储过程,Function,触发器实现解析时间类型的字段并插入的对应的数据表中
- mybatis 3.4.2 启动过程-配置文件的解析与SqlSessionFactory的获得
- java通过url在线预览Word、excel、ppt、pdf、txt文档中的内容【只获得其中的文字】
- SQL通过拆分某字段中的内容来实现与对应表连接查询
- Android 通过源码解析 Fragment 启动过程
- 淘宝数据库OceanBase SQL编译器部分 源码阅读--解析SQL语法树
- sphinx 源码阅读之 分词,压缩索引,倒排
- 解析一个通过添加本地分区索引提高SQL性能的案例
- JTable( 放在JScrollPane中 )中加入一行后, 然后让其获得焦点且滚动条自动下来
- 如何通过T-SQL获得当前连接的客户端的IP和机器名...