全文检索之sphinx源码分析--配置文件和轮转操作

    从索引的数据来源、实时可见性的角度来看,我们可以认为conf配置文件是Sphinx组件的中心。所有有关数据来源、索引文件包含的数据量、数据属性、检索程序searchd监听的端口、响应时间等等一系列配置参数都来自conf文件。

    下面以一些典型的配置文件配置项来进行解释:

    source xxx:基本数据来源,每次创建索引文件时都是都执行该段的sql_qurey语句,从中获取基本数据提供给indexer。

    sql_query:索引数据来源,必须有id列。我们可以通过关键字从searchd中取得id值,然后通过id值反查数据库。

    Index XXXXXX:这些字段就是用来定义每一个索引文件的具体属性的。需要注意如果我们没有设置docinfo因此会采取默认值none,也就是说不存储任何doc里的信息;而hitless_words=all则表示我们忽略了所有的的hitPos信息。这两个字段的设置可以使我们的索引文件所占空间大大减小(spa和spp分别负责这两部分信息的存储,可以看到如果按照这样的设置则每个索引中这两个文件基本都是空的)。sphinx支持分布式的索引(distributed),该类型索引中的local字段包含了分布式可查的所有索引文件,如果配置了agent则可以指向远程searchd服务端口。当分布式索引接收到请求时会向local下的所有索引文件进行查询,同时将接收到的语句传给agent。而当远程监听的searchd接收到该语句后就对自己名下的索引文件进行检索,再返回给searchd_present,最终由searchd_present进行汇总返回。下图是一个典型的分布式索引

    Indexer和searchd:分别对建索引的indexer和查索引的searchd进行了设置。需要注意不同配置文件针对不同的searchd,因此监听的端口和pid文件路径会有所不同,其中pid文件很关键,在rotate属性被激活时,indexer会通过该文件中记录的searchd的id号发送sighup信号。

    关于indexer和searchd各自的设置项目在官方文档里都有明确的解释,即使只看名称也可以猜个大概,这里就不多说了,需要重点说明的几个参数是:

    preopen_indexes:索引预开启,是否在启动是强制重新打开所有索引文件。可选选项,默认为1(全部打开)。设置为 1 时,会对所有提供服务的索引打开 preopen 选项,在代码层面会在prealloc函数中直接打开spd、spp、spi等文件(默认只打开spi的checkpoint列表,在查询时才会打开需要检索的索引文件spd和spp)Preopen_indexes可以防止rotatequery交插进行时引起的查询失败,所以sphinx建议打开。

    max_matches:最大返回匹配数,守护进程在内存中为每个索引所保持并返回给客户端的匹配数目的最大值。可选选项,默认值为1000。我们在进行查询到的时候会有cutoff和max_matches两个参数可配,conf文件的max_matches是查询时的max_matches的最大值,代表一次查询返回的结果行数,而cutoff则很奇怪,意思是对每个索引文件进行查询返回的最大结果行数,通常设置这两个值相同即可

    ROTATE轮转

    当rotate选项被激活时,indexer在完成创建或merge的操作后indexer需要将.tmp文件重命名为.new文件,然后indexer会向searchd发送sighup命令。

    Searchd可以采取多种模式,主要是针对每个查询可以采取串行模式(每次只有一个查询,新的查询在队列里排着)、PRE_FORK模式(预分配一定的槽位等查询来)、MPM_THREADS模式(也就是对每一个查询都新起一个线程应对)。Rotate的具体操作是由g_tRotateThread线程调用RotationThreadFunc函数进行定时检查的,具体的各个线程配合方式可见下图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值