sphinx代码结构

Coreseek代码结构分析

本文档对coreseek的系统组成和代码主要流程做一个说明。

一.Coreseek的系统组成

Coreseek整个系统的组成,可用下图来表示。

整个coreseek系统由多个可执行程序和一套api组成。

1. 可执行程序主要由下面这些组成:

a)         索引建立和维护程序(索引程序indexer)

b)        查询服务程序(后台服务程序searchd)

c)         辅助工具程序(search, spelldump)

2. Api主要由下面两个组成

a)         应用程序api(包括rubyC/C++, Python, php的程序api

b)        MysqlsphinxSE引擎接口

 

 

 

 

 


二.Coreseek的工作流程

下图简要描述了coreseek的索引建立、查询和合并的主要工作流程。图后面有简要说明。

 

Coreseek的主要工作流程可以分成三部分:

l         首先建立主索引;

l         而后在主索引基础上进行查询;

l         根据业务需要每隔一段时间,对新增的业务数据建立增量索引,并将增量索引合并到主索引里面。

1. 索引的建立(1-5)

a)         使用者首先必须建立索引,才能使用coreseek系统进行查询(第一步)

b)        索引程序根据用户请求,读取配置文件,从源数据中读取数据。(第二步)

c)         根据源数据的数据进行分析计算,建立索引(第三步)

d)        将建立的索引写入到索引文件(第四步)

e)         返回索引建立结束的消息(第五步)

2. 根据索引进行查询(6-11)

a)         使用者调用查询api,输入查询的关键词和条件(第六步)

b)        Api将用户的输入,转化成查询的数据包,发送到sphinx查询服务器(第七步)

c)         查询服务器到索引文件中进行查询,得到查询结果(第八步)

d)        返回查询结果给用户(第九步—第十一步)

3. 增量索引的建立和合并(12-22)

a)         每隔一段时间,当业务数据发生更改的时候,需要将更改的数据合并到索引中,以便在查询中能够查询到更改以后的数据。这需要使用者先发起索引建立的请求,对增量数据建立增量索引(第十二步)

b)        索引程序从源数据中,查询到从上次建立索引到现在这段时间中,产生更新的数据(第十三步)

c)         对这部分更新的数据进行分析计算,建立增量索引(第十四步)

d)        将增量索引写入到增量索引文件中(第十五步)

e)         建立增量索引结束(第十六步)

f)         用户发出指令,对增量索引和主索引进行合并(第十七步)

g)        从增量索引文件读取增量索引的数据(第十八步)

h)        从主索引读取主索引的数据(第十九步)

i)          合并增量索引和主索引(第二十步)

j)          将合并后的索引写入到新的索引文件,用新的索引文件替换主索引(第二十一步)

k)        合并索引结束(第二十二步)

 


.文件目录结构

1. 目录结构

把主要的文件目录结构做一个简单说明。省略了部分编译配置文件和一些说明文件。

 

|-- csft-3.2.14    coreseek源代码

|   |-- api  包括java,ruby,C/C++phpsphinx访问api接口

|   |-- codeblocks    code block的项目工程文件

|   |-- config     编译环境的配置文件

|   |-- contrib   放置第三方扩展的api接口和常用脚本,但目前基本为空

|   |-- csft.doc   空置

|   |-- csft.pytest   python的一个脚本,可以忽略

|   |-- doc    用户手册和部分说明文档。对使用和阅读代码有作用,强烈建议阅读。

|   |-- example.sql   生成手册和测试里面提到的示例数据库schemasql脚本

|   |-- libexpat   vc的工程项目文件

|   |-- libstemmer_c    vc的工程项目文件

|   |-- misc  一些辅助文件,可以忽略

|   |-- mysqlse  sphinxSE的文件,是mysql的引擎文件,放在编译mysql的时候进行编译

|   |-- pymmseg   mmseg提供出来的python接口

|   |-- src  coreseek源代码目录。核心代码全部在这里

|   |-- test   测试代码

|   `-- win   windows下的工程配置文件

|-- mmseg-3.2.14   mmseg源代码

|   |-- config   编译配置文件

|   |-- data  词典文件

|   |-- python  python接口api代码

|   |-- ruby  ruby接口api代码

|   |-- script   python的一部分生成字典的脚本

|   |-- src  mmseg的源代码目录,核心代码都在这里

`-- testpack   测试配置和数据包

    |-- api  测试环境需要的api接口和测试脚本

    |-- etc 测试环境配置文件

`-- var 测试环境运行数据

 

 

2. Csft/src目录下的文件用途说明

csft-3.2.14/src

|-- indexer.cpp   索引程序index的入口主函数

|-- indextool.cpp  工具程序indextool的入口主函数

|-- llsphinxql.c    sphinql的语法分析器Flex

|-- md5.cpp  实现md5算法的代码

|-- md5.h  实现md5算法的代码

|-- py_helper.cpp python语言交互的接口代码

|-- py_helper.h  python语言交互的接口代码

|-- py_layer.cpp python语言相关的代码

|-- py_layer.h   python语言相关的代码

|-- py_source.cpp  python语言相关的代码

|-- py_source.h  python语言相关的代码

|-- py_sphinx.c  python语言相关的代码

|-- py_sphinx_interface.cpp  python语言相关的代码

|-- py_sphinx_interface.h  python语言相关的代码

|-- search.cpp  工具程序search的入口主函数

|-- searchd.cpp  查询程序searchd的入口主函数

|-- spelldump.cpp  工具程序spelldump的入口主函数

|-- sphinx.cpp   主要的逻辑代码,索引建立合并和查询主要的逻辑都在这里。

|-- sphinx.h  

|-- sphinx_internal.h

|-- sphinxcustomsort.inl  支持用户自定义排序的一个文件,用于支持 @custom 的排序方式

|-- sphinxexcerpt.cpp   产生文本摘要和高亮的代码

|-- sphinxexcerpt.h  

|-- sphinxexpr.cpp    跟语法分析器有关的代码

|-- sphinxexpr.h  跟语法分析器有关的代码

|-- sphinxexpr.y   语法分析器yacc的输入文件

|-- sphinxfilter.cpp   sphinx过滤器filter的实现代码

|-- sphinxfilter.h

|-- sphinxmetaphone.cpp  实现Metaphone算法的代码,它是一种基于音标的词干组织法。

|-- sphinxql.l  sphinxql的语法分析器lex的输入文件

|-- sphinxql.y  sphinxql的语法yacc的输入文件

|-- sphinxquery.cpp  sphinx查询语句的解析代码,对查询语句进行解析,并生成语法分析树

|-- sphinxquery.h

|-- sphinxquery.y sphinxql的语法yacc的输入文件

|-- sphinxselect.y  sphinxql的语法yacc的输入文件

|-- sphinxsort.cpp  排序算法实现代码

|-- sphinxsoundex.cpp  语音编码算法代码

|-- sphinxstd.cpp 一部分通用的代码,如lock锁,Mutex,随机器等封装好的代码。

|-- sphinxstd.h 

|-- sphinxstem.h  词干提炼代码的头文件

|-- sphinxstemcz.cpp  捷克语词干的提炼代码

|-- sphinxstemen.cpp  英语的词干提炼代码

|-- sphinxstemru.cpp 俄语的词干提炼代码

|-- sphinxstemru.inl  俄语的词干提炼代码

|-- sphinxtimers.h 计时器代码,这个是用来做sphinx内部性能分析用,看耗时主要在哪部分

|-- sphinxutils.cpp  对配置文件进行解析的代码

|-- sphinxutils.h

|-- sphinxversion.h   定义sphinx版本的宏

|-- tests.cpp  对分词器进行测试的代码

|-- tokenizer_zhcn.cpp 中文分词器的实现代码

|-- tokenizer_zhcn.h 中文分词器的实现代码

|-- yy.cmd  后面这部分yyxxx.xx的文件都是跟语法分析器相关的文件,不再一一分析。

|-- yysphinxexpr.c  跟语法分析器相关的文件

|-- yysphinxexpr.h  跟语法分析器相关的文件

|-- yysphinxql.c  跟语法分析器相关的文件

|-- yysphinxql.h  跟语法分析器相关的文件

|-- yysphinxquery.c  跟语法分析器相关的文件

|-- yysphinxquery.h  跟语法分析器相关的文件

|-- yysphinxselect.c  跟语法分析器相关的文件

`-- yysphinxselect.h  跟语法分析器相关的文件

 

 

 

 

 

Coreseek 全文检索服务器 2.0 (Sphinx 0.9.8)参考手册和源程序 手册內容: 文档版本:v0.9 目录 1. 简介 1.1. 什么是 Sphinx 1.2. Sphinx 的特性 1.3. 如何获得 Sphinx 1.4. 许可协议 1.5. 作者和贡献者 1.6. 开发历史 2. 安装 2.1. 支持的操作系统 2.2. 依赖的工具 2.3. 安装 Sphinx 2.4. 已知的问题和解决方法 2.5. Sphinx 快速入门教程 3. 建立索引 3.1. 数据源 3.2. 属性 3.3. 多值属性 ( MVA : multi-valued attributes) 3.4. 索引 3.5. 数据源的限制 3.6. 字符集 , 大小写转换 , 和转换表 3.7. SQL 数据源 (MySQL, PostgreSQL) 3.8. xmlpipe 数据源 3.9. xmlpipe2 数据源 3.10. 实时索引 更新 3.11. 索引合并 4. 搜索 4.1. 匹配模式 4.2. 布尔查询 4.3. 扩展查询 4.4. 权值计算 4.5. 排序模式 4.6. 结果分组(聚类) 4.7. 分布式搜索 4.8. searchd 日志格式 5. API 参考 5.1. 通用 API 方法 5.1.1. GetLastError 5.1.2. GetLastWarning 5.1.3. SetServer 5.1.4. SetRetries 5.1.5. SetArrayResult 5.2. 通用搜索设置 5.2.1. SetLimits 5.2.2. SetMaxQueryTime 5.3. 全文搜索设置 5.3.1. SetMatchMode 5.3.2. SetRankingMode 5.3.3. SetSortMode 5.3.4. SetWeights 5.3.5. SetFieldWeights 5.3.6. SetIndexWeights 5.4. 结果集过滤设置 5.4.1. SetIDRange 5.4.2. SetFilter 5.4.3. SetFilterRange 5.4.4. SetFilterFloatRange 5.4.5. SetGeoAnchor 5.5. GROUP BY 设置 5.5.1. SetGroupBy 5.5.2. SetGroupDistinct 5.6. 搜索 5.6.1. Query 5.6.2. AddQuery 5.6.3. RunQueries 5.6.4. ResetFilters 5.6.5. ResetGroupBy 5.7. 额外的方法 5.7.1. BuildExcerpts 5.7.2. UpdateAttributes 6. MySQL 存储引擎 (SphinxSE) 6.1. SphinxSE 概览 6.2. 安装 SphinxSE 6.2.1. 在 MySQL 5.0.x 上 编译 SphinxSE 6.2.2. 在 MySQL 5.1.x 上编译 SphinxSE 6.2.3. SphinxSE 安装测试 6.3. 使用 SphinxSE 7. 报告 bugs 8. sphinx.conf 选项参考 8.1. Data source 配置选项 8.1.1. type 8.1.2. sql_host 8.1.3. sql_port 8.1.4. sql_user 8.1.5. sql_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值