网上配置文档众多,但是对着他们的文档来做老是出问题,于是花了点时间研究了一下,写成总结,方便以后查阅。也希望学习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. jsp版ueditor图片在线管理返回绝对路径

    引用:http://zhengyunfei.iteye.com/blog/2149979 如果你有富文本编辑器的功能需要开发,我推荐你用百度的ueditor.本文将与你分享jsp版ueditor开发中 ...

  2. JDK1.6.0+Tomcat6.0的安装配置

    JDK1.6.0+Tomcat6.0的安装配置是如何进行的呢?我们按照下面几个步骤来: 1.安装JDK 这是进行JSP开发的重要一步,也是安装JSP引擎(Tomcat.Resin.Weblogic等) ...

  3. 基于CSS3自定义发光radiobox单选框

    之前我们分享过一些CSS3和HTML5实现的自定义checkbox和Radiobox,比如纯CSS3美化Checkbox和Radiobox按钮,不仅外观唯美,而且Radiobox选中时还有动画效果.今 ...

  4. BM和KMP字符串匹配算法学习

    BM和KMP字符串匹配算法学习 分类: 研究与学习 字符串匹配BM(Boyer-Moore)算法学习心得 http://www.cnblogs.com/a180285/archive/2011/12/ ...

  5. swconfig--交换接口配置命令

    swconfig是交换接口(switch)配置命令. swconfig list ; 列出可用的SWITCH设备信息(dev参数) Found: switch0 - ag71xx-mdio. swco ...

  6. MongoDB Shell 了解使用

    配置环境变量 WIN10系统:右键单击"此电脑"--属性--高级系统设置--高级--环境变量,添加C:\Program Files\MongoDB\Server\3.0\bin 如 ...

  7. C语言 格式化输出--%m.n

    格式字符:格式字符用以指定输出项的数据类型和输出格式. ①d格式:用来输出十进制整数(int).有以下几种用法: %d:按整型数据的实际长度输出. %m.nd:m为指定的输出字段的宽度,n定义为实际输 ...

  8. MySQL 常用语法 之 UNION与UNION ALL

    下面讲一下mySql中的union和union all 的功能以及区别 A union B 是将表A的数据和表B的数据连接成一张表,前提是查询的两张表的列数一定要一样否则出错. A union all ...

  9. C++中函数的返回值

    原文 [ 函数的返回值用于初始化在调用函数处创建的临时对象.在求解表达式时,如果需要一个地方储存其运算结果,编译器会创建一个没有命名的对象,这就是 临时对象.temporary object ] -- ...

  10. php跨form提交方法

    1.php curl function curlPost($url,$params) { $postData = ''; foreach($params as $k => $v) { $post ...