Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2782463
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: 架构设计与优化

2014-03-03 09:15:27


  1. 一、sphinx的配置
  2. 1. sphinx配置文件结构介绍
  3. Sphinx的配置文件结构如下:
  4. Source 源名称1{
  5. #添加数据源,这里会设置一些连接数据库的参数比如数据库的IP、用户名、密码等
  6. #设置sql_query、设置sql_query_pre、设置sql_query_range等后面会结合例子做详细介绍
  7.  ……
  8. }
  9. Index 索引名称1{
  10.      Source=源名称1
  11. #设置全文索引
  12.      ……
  13. }
  14. Indexer{
  15. #设置Indexer程序配置选项,如内存限制等
  16. ……
  17. }
  18. Searchd{
  19. #设置Searchd守护进程本身的一些参数
  20. ……
  21. }
  22. Source和Index都可以配置多个。
  23.  
  24. 2. spinx配置案例详细解释
  25. 接下来就来针对一个配置案例来做详细的配置介绍:
  26. #定义一个数据源
  27. source search_main
  28. {
  29.            #定义数据库类型
  30.     type = mysql
  31.            #定义数据库的IP或者计算机名
  32.     sql_host = localhost
  33.            #定义连接数据库的帐号
  34.     sql_user = root
  35.            #定义链接数据库的密码
  36.     sql_pass = test123
  37.            #定义数据库名称
  38.     sql_db = test
  39.            #定义连接数据库后取数据之前执行的SQL语句
  40.     sql_query_pre = SET NAMES utf8
  41.     sql_query_pre = SET SESSION query_cache_type=OFF
  42.            #创建一个sph_counter用于增量索引
  43.     sql_query_pre = CREATE TABLE IF NOT EXISTS sph_counter \
  44.                                       ( counter_id INTEGER PRIMARY KEY NOT NULL,max_doc_id INTEGER NOT NULL)
  45.            #取数据之前将表的最大id记录到sph_counter表中
  46.     sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(searchid) FROM v9_search
  47.            #定义取数据的SQL,第一列ID列必须为唯一的正整数值
  48.     sql_query = SELECT searchid,typeid,id,adddate,data FROM v9_search where \
  49.                                       searchid<( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 ) \
  50.                                         and searchid>=$start AND searchid<=$end
  51.            # sql_attr_uint和sql_attr_timestamp用于定义用于api过滤或者排序,写多行制定多列
  52.     sql_attr_uint = typeid
  53.     sql_attr_uint = id
  54.     sql_attr_timestamp = adddate
  55.            #分区查询设置
  56.     sql_query_range = SELECT MIN(searchid),MAX(searchid) FROM v9_search
  57.            #分区查询的步长
  58.     sql_range_step = 1000
  59.            #设置分区查询的时间间隔
  60.     sql_ranged_throttle = 0
  61.            #用于CLI的调试
  62.     sql_query_info = SELECT * FROM v9_search WHERE searchid=$id
  63. }
  64. #定义一个增量的源
  65. source search_main_delta : search_main
  66. {
  67.     sql_query_pre = set names utf8
  68.            #增量源只查询上次主索引生成后新增加的数据
  69. #如果新增加的searchid比主索引建立时的searchid还小那么会漏掉
  70.     sql_query = SELECT searchid,typeid,id,adddate,data FROM v9_search where \
  71.                                   searchid>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 ) \
  72.                                    and searchid>=$start AND searchid<=$end
  73.     sql_query_range = SELECT MIN(searchid),MAX(searchid) FROM v9_search where \
  74.                                        searchid>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
  75. }
  76.  
  77. #定义一个index_search_main索引
  78. index index_search_main
  79. {
  80.            #设置索引的源
  81.     source = search_main
  82.            #设置生成的索引存放路径
  83.     path = /usr/local/coreseek/var/data/index_search_main
  84.            #定义文档信息的存储模式,extern表示文档信息和文档id分开存储
  85.     docinfo = extern
  86.            #设置已缓存数据的内存锁定,为0表示不锁定
  87.     mlock = 0
  88.            #设置词形处理器列表,设置为none表示不使用任何词形处理器
  89.     morphology = none
  90.            #定义最小索引词的长度
  91.     min_word_len = 1
  92.            #设置字符集编码类型,我这里采用的utf8编码和数据库的一致
  93.     charset_type = zh_cn.utf-8
  94.            #指定分词读取词典文件的位置
  95.     charset_dictpath = /usr/local/mmseg3/etc
  96.            #不被搜索的词文件里表。
  97.     stopwords = /usr/local/coreseek/var/data/stopwords.txt
  98.            #定义是否从输入全文数据中取出HTML标记
  99.     html_strip = 0
  100. }
  101. #定义增量索引
  102. index index_search_main_delta : index_search_main
  103. {
  104.     source = search_main_delta
  105.     path = /usr/local/coreseek/var/data/index_search_main_delta
  106. }
  107.  
  108. #定义indexer配置选项
  109. indexer
  110. {
  111.            #定义生成索引过程使用索引的限制
  112.     mem_limit = 512M
  113. }
  114.  
  115. #定义searchd守护进程的相关选项
  116. searchd
  117. {
  118.            #定义监听的IP和端口
  119.     #listen = 127.0.0.1
  120.     #listen = 172.16.88.100:3312
  121.     listen = 3312
  122.     listen = /var/run/searchd.sock
  123.            #定义log的位置
  124.     log = /usr/local/coreseek/var/log/searchd.log
  125.            #定义查询log的位置
  126.     query_log = /usr/local/coreseek/var/log/query.log
  127.            #定义网络客户端请求的读超时时间
  128.     read_timeout = 5
  129.            #定义子进程的最大数量
  130.     max_children = 300
  131.            #设置searchd进程pid文件名
  132.     pid_file = /usr/local/coreseek/var/log/searchd.pid
  133.            #定义守护进程在内存中为每个索引所保持并返回给客户端的匹配数目的最大值
  134.     max_matches = 100000
  135.            #启用无缝seamless轮转,防止searchd轮转在需要预取大量数据的索引时停止响应
  136.     #也就是说在任何时刻查询都可用,或者使用旧索引,或者使用新索引
  137.     seamless_rotate = 1
  138.            #配置在启动时强制重新打开所有索引文件
  139.     preopen_indexes = 1
  140.            #设置索引轮转成功以后删除以.old为扩展名的索引拷贝
  141.     unlink_old = 1
  142.            # MVA更新池大小,这个参数不太明白
  143.     mva_updates_pool = 1M
  144.            #最大允许的包大小
  145.     max_packet_size = 32M
  146.            #最大允许的过滤器数
  147.     max_filters = 256
  148.            #每个过滤器最大允许的值的个数
  149.     max_filter_values = 4096
  150. }
  151.  
  152. 二、sphinx的管理
  153. 1. 生成Sphinx中文分词词库(新版本的中文分词库已经生成在了/usr/local/mmseg3/etc目录下)
  154. cd /usr/local/mmseg3/etc
  155. /usr/local/mmseg3/bin/mmseg -u thesaurus.txt
  156. mv thesaurus.txt.uni uni.lib
  157. 2. 生成Sphinx中文同义词库
  158. #同义词库是说比如你搜索深圳的时候,含有深圳湾等字的也会被搜索出来
  159. /data/software/sphinx/coreseek-3.2.14/mmseg-3.2.14/script/build_thesaurus.py unigram.txt > thesaurus.txt
  160. /usr/local/mmseg3/bin/mmseg -t thesaurus.txt
  161. 将thesaurus.lib放到uni.lib同一目录
  162. 3. 生成全部索引
  163. /usr/local/coreseek/bin/indexer --config /usr/local/coreseek/etc/sphinx.conf –all
  164. 若此时searchd守护进程已经启动,那么需要加上—rotate参数:
  165. /usr/local/coreseek/bin/indexer --config /usr/local/coreseek/etc/sphinx.conf --all --rotate
  166. 4. 启动searchd守护进程
  167. /usr/local/coreseek/bin/searchd --config /usr/local/coreseek/etc/sphinx.conf
  168. 5. 生成主索引
  169. 写成shell脚本,添加到crontab任务,设置成每天凌晨1点的时候重建主索引
  170. /usr/local/coreseek/bin/indexer --config /usr/local/coreseek/etc/sphinx.conf --rotate index_search_main
  171. 6. 生成增量索引
  172. 写成shell脚本,添加到crontab任务,设置成每10分钟运行一次
  173. /usr/local/coreseek/bin/indexer --config /usr/local/coreseek/etc/sphinx.conf --rotate index_search_main_delta
  174. 7. 增量索引和主索引的合并
  175. 写成shell脚本,添加到计划任务,每15分钟跑一次
  176. /usr/local/coreseek/bin/indexer --config /usr/local/coreseek/etc/sphinx.conf --merge index_search_main index_search_main_delta --rotate
  177. 8. 使用search命令在命令行对索引进行检索
  178. /usr/local/coreseek/bin/search --config /usr/local/coreseek/etc/sphinx.conf 游戏

阅读(5436) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

nba76ers2014-03-05 11:07:30

http://www.itokit.com/2013/0409/74888.html
http://hot66hot.iteye.com/blog/1759559
http://2689027.blog.51cto.com/2679027/1134035
http://blog.zhuyin.org/817.html
http://www.cnblogs.com/zhenzhong/p/3312670.html
http://ju.outofmemory.cn/entry/25517
http://hi.baidu.com/learsu/item/a88f4753825c7b978d12ed6f
http://blog.163.com/zf_zhouf/blog/static/2000980262011910347176/

sphinx 更新索引不成功解决方法
http://www.360doc.com/content/12/1224/13/4330887_255998912.shtml

解决id
http://blog.csdn.net/liushuai_andy/article/details/9138455

ht