网上配置文档众多,但是对着他们的文档来做老是出问题,于是花了点时间研究了一下,写成总结,方便以后查阅。也希望学习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. slimphp中间件调用流程的理解

    slimphp是一款微型php框架,主要是处理http请求,并调用合适的程序处理,并返回一个http响应. 它遵循php的psr7规范,可以很方便的集成其它遵循psr7规范的php组建. 当读到中间件 ...

  2. linqtosql 实现数据分页

    cs代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syst ...

  3. git学习(四):理解git暂存区(stage)

    与一般的版本管理不同的是,git在提交之前要将更改通过git add 添加到暂存区才能提交(git commit).即使是已经交给了git来管理的文件也是如此.这里继续学习git的暂存区. 通过git ...

  4. QT4.8.5 QComboBox 增加选择菜单记录

    QT4.8.5 QComboBox 增加选择菜单记录 因为软件需要测试多个UART ,多个LAN,当要测试多个同样功能的时候就可以使用QComboBox类实现一个菜单选择功能. 步骤如下: 1. 在U ...

  5. Qt中的串口编程之一

    QtSerialPort 简介 功能介绍 SerialPort SerialPortInfo 源代码 编译和安装 配置编译环境 Perl只是在Qt5的时候才需要Qt4的情况下可以不配置 使用如下推荐步 ...

  6. [转载]php设计模式之单例、多例设计模式

    单例(Singleton)模式和不常见的多例(Multiton)模式控制着应用程序中类的数量.如模式名称,单例只能实例化一次,只有一个对象,多例模式可以多次实例化. 基于Singleton的特性,我们 ...

  7. bootstrap -- css -- 文字、列表

    文字 <small></small>:呈现小号字体效果. <big></big>:程序大号字体效果 <abbr></abbr>: ...

  8. hdu 5044 树区间操作最后输出/ lca+dfs

    题意:一棵树,俩种操作:1 有路径上的全部点加vi,2全部边加vi. 先离线求出全部询问的lca,再遍历询问一次,点+vi,lca-2*vi ,最后dfs从叶子扫上来一次,最后再祖先点补上就可以.用了 ...

  9. 转载:Erlang 函数(Efficiency Guide)

    转自:http://www.cnblogs.com/futuredo/archive/2012/10/26/2737644.html Functions 1  Pattern matching 模式匹 ...

  10. perl 利用管道读取压缩文件内容

    perl的文件句柄不仅支持普通文件, 还支持管道,今天需要统计一个fastq文件中的序列数和碱基数,而NGS的fastq文件一般都是gzip压缩的,所以 需要读取压缩文件中的内容,代码如下: my ( ...