网上配置文档众多,但是对着他们的文档来做老是出问题,于是花了点时间研究了一下,写成总结,方便以后查阅。也希望学习sphinx的朋友能少走弯路。Coreseek的安装请参考:http://blog.chinaunix.net/uid-20639775-id-3261834.html

一、sphinx的配置

  1. sphinx配置文件结构介绍

Sphinx的配置文件结构如下:

Source 源名称1{

#添加数据源,这里会设置一些连接数据库的参数比如数据库的IP、用户名、密码等

#设置sql_query、设置sql_query_pre、设置sql_query_range等后面会结合例子做详细介绍

……

}

Index 索引名称1{

Source=源名称1

#设置全文索引

……

}

Indexer{

#设置Indexer程序配置选项,如内存限制等

……

}

Searchd{

#设置Searchd守护进程本身的一些参数

……

}

Source和Index都可以配置多个。

  1. spinx配置案例详细解释

接下来就来针对一个配置案例来做详细的配置介绍:

#定义一个数据源

source search_main

{

#定义数据库类型

type                 = mysql

#定义数据库的IP或者计算机名

sql_host             = localhost

#定义连接数据库的帐号

sql_user             = root

#定义链接数据库的密码

sql_pass             = test123

#定义数据库名称

sql_db               = test

#定义连接数据库后取数据之前执行的SQL语句

sql_query_pre        = SET NAMES utf8

sql_query_pre        = SET SESSION query_cache_type=OFF

#创建一个sph_counter用于增量索引

sql_query_pre        = CREATE TABLE IF NOT EXISTS sph_counter \

( counter_id INTEGER PRIMARY KEY NOT NULL,max_doc_id INTEGER NOT NULL)

#取数据之前将表的最大id记录到sph_counter表中

sql_query_pre        = REPLACE INTO sph_counter SELECT 1, MAX(searchid) FROM v9_search

#定义取数据的SQL,第一列ID列必须为唯一的正整数值

sql_query            = SELECT searchid,typeid,id,adddate,data FROM v9_search where \

searchid<( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 ) \

and searchid>=$start AND searchid<=$end

# sql_attr_uint和sql_attr_timestamp用于定义用于api过滤或者排序,写多行制定多列

sql_attr_uint        = typeid

sql_attr_uint        = id

sql_attr_timestamp   = adddate

#分区查询设置

sql_query_range      = SELECT MIN(searchid),MAX(searchid) FROM v9_search

#分区查询的步长

sql_range_step       = 1000

#设置分区查询的时间间隔

sql_ranged_throttle  = 0

#用于CLI的调试

sql_query_info       = SELECT * FROM v9_search WHERE searchid=$id

}

#定义一个增量的源

source search_main_delta : search_main

{

sql_query_pre       = set names utf8

#增量源只查询上次主索引生成后新增加的数据

#如果新增加的searchid比主索引建立时的searchid还小那么会漏掉

sql_query           = SELECT searchid,typeid,id,adddate,data FROM v9_search where  \

searchid>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 ) \

and searchid>=$start AND searchid<=$end

sql_query_range     = SELECT MIN(searchid),MAX(searchid) FROM v9_search where \

searchid>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )

}

#定义一个index_search_main索引

index index_search_main

{

#设置索引的源

source            = search_main

#设置生成的索引存放路径

path         = /usr/local/coreseek/var/data/index_search_main

#定义文档信息的存储模式,extern表示文档信息和文档id分开存储

docinfo           = extern

#设置已缓存数据的内存锁定,为0表示不锁定

mlock             = 0

#设置词形处理器列表,设置为none表示不使用任何词形处理器

morphology        = none

#定义最小索引词的长度

min_word_len      = 1

#设置字符集编码类型,我这里采用的utf8编码和数据库的一致

charset_type      = zh_cn.utf-8

#指定分词读取词典文件的位置

charset_dictpath  = /usr/local/mmseg3/etc

#不被搜索的词文件里表。

stopwords       = /usr/local/coreseek/var/data/stopwords.txt

#定义是否从输入全文数据中取出HTML标记

html_strip       = 0

}

#定义增量索引

index index_search_main_delta : index_search_main

{

source   = search_main_delta

path    = /usr/local/coreseek/var/data/index_search_main_delta

}

#定义indexer配置选项

indexer

{

#定义生成索引过程使用索引的限制

mem_limit        = 512M

}

#定义searchd守护进程的相关选项

searchd

{

#定义监听的IP和端口

#listen            = 127.0.0.1

#listen            = 172.16.88.100:3312

listen            = 3312

listen            = /var/run/searchd.sock

#定义log的位置

log                = /usr/local/coreseek/var/log/searchd.log

#定义查询log的位置

query_log          = /usr/local/coreseek/var/log/query.log

#定义网络客户端请求的读超时时间

read_timeout       = 5

#定义子进程的最大数量

max_children       = 300

#设置searchd进程pid文件名

pid_file           = /usr/local/coreseek/var/log/searchd.pid

#定义守护进程在内存中为每个索引所保持并返回给客户端的匹配数目的最大值

max_matches        = 100000

#启用无缝seamless轮转,防止searchd轮转在需要预取大量数据的索引时停止响应

#也就是说在任何时刻查询都可用,或者使用旧索引,或者使用新索引

seamless_rotate    = 1

#配置在启动时强制重新打开所有索引文件

preopen_indexes    = 1

#设置索引轮转成功以后删除以.old为扩展名的索引拷贝

unlink_old         = 1

# MVA更新池大小,这个参数不太明白

mva_updates_pool   = 1M

#最大允许的包大小

max_packet_size    = 32M

#最大允许的过滤器数

max_filters        = 256

#每个过滤器最大允许的值的个数

max_filter_values  = 4096

}

二、sphinx的管理

  1. 生成Sphinx中文分词词库(新版本的中文分词库已经生成在了/usr/local/mmseg3/etc目录下)

cd /usr/local/mmseg3/etc

/usr/local/mmseg3/bin/mmseg -u thesaurus.txt

mv thesaurus.txt.uni uni.lib

  1. 生成Sphinx中文同义词库

#同义词库是说比如你搜索深圳的时候,含有深圳湾等字的也会被搜索出来

/data/software/sphinx/coreseek-3.2.14/mmseg-3.2.14/script/build_thesaurus.py unigram.txt > thesaurus.txt

/usr/local/mmseg3/bin/mmseg -t thesaurus.txt

将thesaurus.lib放到uni.lib同一目录

  1. 生成全部索引

/usr/local/coreseek/bin/indexer --config /usr/local/coreseek/etc/sphinx.conf –all

若此时searchd守护进程已经启动,那么需要加上—rotate参数:

/usr/local/coreseek/bin/indexer --config /usr/local/coreseek/etc/sphinx.conf --all --rotate

  1. 启动searchd守护进程

/usr/local/coreseek/bin/searchd --config /usr/local/coreseek/etc/sphinx.conf

  1. 生成主索引

写成shell脚本,添加到crontab任务,设置成每天凌晨1点的时候重建主索引

/usr/local/coreseek/bin/indexer --config /usr/local/coreseek/etc/sphinx.conf --rotate index_search_main

  1. 生成增量索引

写成shell脚本,添加到crontab任务,设置成每10分钟运行一次

/usr/local/coreseek/bin/indexer --config /usr/local/coreseek/etc/sphinx.conf --rotate index_search_main_delta

  1. 增量索引和主索引的合并

写成shell脚本,添加到计划任务,每15分钟跑一次

/usr/local/coreseek/bin/indexer --config /usr/local/coreseek/etc/sphinx.conf --merge index_search_main index_search_main_delta --rotate

  1. 使用search命令在命令行对索引进行检索

/usr/local/coreseek/bin/search --config /usr/local/coreseek/etc/sphinx.conf  游戏

三、参考文章链接:

http://baobeituping.iteye.com/blog/870354

http://www.sphinxsearch.org/sphinx-tutorial

http://blog.s135.com/post/360/

http://youngerblue.iteye.com/blog/1513140

sphinx的配置和管理.No2的更多相关文章

  1. sphinx的配置和管理

    网上配置文档众多,但是对着他们的文档来做老是出问题,于是花了点时间研究了一下,写成总结,方便以后查阅.也希望学习sphinx的朋友能少走弯路.Coreseek的安装请参考:http://blog.ch ...

  2. Sphinx安装配置应用

    Sphinx 是由俄罗斯人Andrew Aksyonoff开发的一个全文搜索引擎.意图为其他应用提供高速.地空间占用.高结果相关度的全文搜索功能.Sphinx可以非常容易的与SQL数据库和脚本语言集成 ...

  3. Azure Redis Cache (4) 配置和管理Redis Cache

    <Windows Azure Platform 系列文章目录> 我们在创建完Azure Redis Cache后,经常需要切换Redis Cache的服务级别,这里我简单介绍一下使用Azu ...

  4. mysql多实例的配置和管理

    原文地址:mysql多实例的配置和管理 作者:飞鸿无痕 多实例mysql的安装和管理 mysql的多实例有两种方式可以实现,两种方式各有利弊.第一种是使用多个配置文件启动不同的进程来实现多实例,这种方 ...

  5. 分享:linux下apache服务器的配置和管理

    linux下apache服务器的配置和管理. 一.两个重要目录: Apache有两个重要的目录:1.配置目录/etc/httpd/conf:2.文档目录/var/www: 二.两种配置模式: Apac ...

  6. 关于spring3中No Session found for current thread!and Transaction的配置和管理(转)

    今天我是特别的郁闷,本来项目做到一半,以前都好好的,结果下午就出现问题,苦逼的到现在才解决.它出现问题的时候都一声不坑, ,(天啦,现在才发现CSDN啥时候把QQ表情给整过来了)就在注册用户的时候,咦 ...

  7. 增加配置Apache2 管理 SVN 访问权限

    继续之前的 文章里的配置 配置Apache2 管理 SVN 一.修改配置/etc/httpd/conf.d/ subversion.conf <Location /svn/> DAV sv ...

  8. RabbitMQ_安装配置与管理

    RabbitMQ 安装配置与管理 安装 安装erlang虚拟机 Rabbitmq基于erlang语言开发,所有需要安装erlang虚拟机 #wget  http://www.erlang.org/do ...

  9. Spring事物管理--相关要点及配置事物管理器

    事务的四大特征 1.原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做要么全不做 2.一致性:数据不会因为事务的执行而遭到破坏 3.隔离性:一个事物的执行,不受其他事务的干扰,即并 ...

随机推荐

  1. dp之最长递增子序列模板poj3903

    最长递增子序列,Longest Increasing Subsequence 下面我们简记为 LIS.排序+LCS算法 以及 DP算法就忽略了,这两个太容易理解了. 假设存在一个序列d[1..9] = ...

  2. 一款基于TweenMax.js的网页幻灯片

    之前介绍了好多网页幻灯片.今天给大家带来一款基于TweenMax.js的网页幻灯片.这款幻灯片以不规则的碎片百叶窗的形式切换.切换效果非常漂亮.一起看下效果图: 在线预览   源码下载 实现的代码. ...

  3. RDLC设计

    1.rdlc报表的日期格式"yyyy/mm/dd 00/00/00"转换为"yyyy-mm-dd" =System.Convert.ToDateTime(Fie ...

  4. Spring使用facotry-method创建单例Bean总结<转>

       阅读目录 1 最原始的实现单例模式的方法(存在线程不安全): 2 通过关键字Synchronized强制线程同步 3 通过静态内部类进行单例 通过spring的factory-method来创建 ...

  5. linux_UAPI_转

    转自:Linux Kernel UAPI 问题描述 从3.5开始,Linux Kernel 里多了一个 uapi 文件夹,里面放了很多 Linux Kernel 各个模块的头文件.如果是第一次碰到,可 ...

  6. Android各版本重要变动记录

    本文来自同步博客. Android M:运行时权限 运行时权限属于比较熟悉的话题不深入展开.除了support包可以让应用完成运行时权限,github上也有好多扩展.用得比较多的是Google官方的E ...

  7. Server 2008作为打印服务器的四大错误解决方案

    http://os.51cto.com/art/201004/197322.htm http://os.51cto.com/art/201004/197322_1.htm http://os.51ct ...

  8. 关于Cocos2d-x中根据分数增加游戏难度的方法

    1.GameScene.h中声明一些分数边界值 //level提升所需的分数 enum LevelUp_Score { Level1Up_Score = , Level2Up_Score = , Le ...

  9. Read from socket failed: Connection reset by peer 问题

    [FAILED] 解决方法:#chmod 600 sshd_config ssh_host_dsa_key ssh_host_key ssh_host_rsa_key#chmod 620 moduli ...

  10. Hibernate 注解中CascadeType用法汇总

    这两天,参加一个课程设计,同时这个项目又作为一个模块镶嵌到其他项目中,考虑如此,应与原先的架构相同,因牵扯到留言和相互@功能,故数据库之间OneToOne,OneToMany,ManyToMany之风 ...