centOS 7 安装sphinx

文章目录

一、背景

在hostxen上新买了一个香港VPS,搭建环境为LNMP+PHPCMS,打算做的一套流程为:

1. 采集数据,发布到phpcms上入库

2. 搭建sphinx,完成全文索引

3. 通过python sphinxapi,调用搜索数据

4. 进行文章组合,生成文章

5. 通过post把生成好的文章,发布到对应站点上。

二、sphinx安装

2.1 安装准备:

① sphinx:

https://github.com/eric1688/sphinx (我采用的是sphin-for-chinases支持中文搜索) 
② xdict :

http://pan.baidu.com/s/1czkGO2 密码:kouv (下载这个分词工具可能需要梯子,因此我直接常上传百度云)
③ shpinxapi: (这个是python调用shpinx的API。直接拿过来导入就可以使用)* 

https://github.com/feeen/sphinxapi/blob/master/sphinxapi/__init__.py
④ 提前安装好libiconv,这个库在编译安装sphinx的时候会报错,需要进行安装,安装的过程中也可能会出现 gets 未声明的报错。

cd srclib && sed -i -e‘/gets is a security/d’ ./stdio.in.h

安装完libiconv后如果还是无法编译sphinx,那么进入 src 目录(注意是sphinx源码目录下面的src),

修改MakeFile 将

LIBS = -lm -lexpat -L/usr/local/lib

改成

LIBS = -lm -lexpat -liconv -L/usr/local/lib

(注意:这块是从网上找到的 LIBS =的原始值可能不一样,直接修改即可)

2.2 安装sphinx


git clone https://github.com/eric1688/sphinx
cd sphinx
./configure –prefix=/usr/local/sphinx
make -j2 && make install

2.3 配置中文支持


在这里先下载好xdict(http://pan.baidu.com/s/1czkGO2 密码:kouv )

tar xf xdict_1.1.tar.gz

/usr/local/sphinx/bin/mkdict xdict_1.1.txt xdict

mv xdict /usr/local/sphinx/etc/

2.4 修改sphinx配置文件


cp sphinx.conf.dist sphinx.conf
vim sphinx.conf
source posts
{
type = mysql 
sql_host = 127.0.0.1
sql_user = test #用户名
sql_pass = test #密码
sql_db = test # 对应数据库
sql_port = 3306 # optional, default is 3306
sql_sock = /var/run/mysqld/mysqld.sock (修改成LNMP的: /tmp/mysqld.sock  )
sql_query = SELECT id, post_title FROM test #sql语句
sql_query_pre = SET NAMES utf8 #中文支持
# sql_attr_uint = id
sql_field_string = post_title
sql_ranged_throttle = 0
}
index post1
{
source = posts
# 索引文件的存放位置 
path = /usr/local/sphinx/var/data/posts
文件存储模式(默认为extern) 
docinfo = extern 
#缓存数据内存锁定 
mlock = 0 
# 马氏形态学(对中文无效) 
morphology = none 
# 索引词最小长度 
min_word_len = 1 
# 数据编码(设置成utf8才能索引中文,最新版本的sphinx不支持这个参数)
# charset_type = utf-8 
# 中文分词词典 
chinese_dictionary = /usr/local/sphinx/etc/xdict 
# 最小索引前缀长度 
min_prefix_len = 0 
# 最小索引中缀长度 
min_infix_len = 1 
# 对于非字母型数据的长度切割 
ngram_len = 1 
# 对否对去除用户输入查询内容 
html_strip = 0 

}
# 索引器设置 
indexer 

# 内存大小限制 默认是 32M, 最大 2047M, 推荐为 256M 到 1024M之间 
mem_limit = 256M 
}
# sphinx服务进程search的相关配置 
searchd 

# 监测端口及形式,一下几种均可,默认为本机9312端口 
# listen = 127.0.0.1 
# listen = 192.168.0.1:9312 
# listen = 9312 
# listen = /var/run/searchd.sock 
# search进程的日志路径
log = /usr/local/sphinx/var/log/searchd.log 
# 查询日志地址 
query_log = /usr/local/sphinx/var/log/query.log 
# 读取超时时间 
read_timeout = 5 
# 请求超时市时间 
client_timeout = 300 
# searche进程的最大运行数 
max_children = 30 
# 进程ID文件 
pid_file = /usr/local/sphinx/var/log/searchd.pid 
# 最大的查询结果返回数 (这个参数新版本不支持) 
#max_matches = 1000 
# 是否支持无缝切换(做增量索引时需要) 
seamless_rotate = 1 
# 在启动运行时是否提前加载所有索引文件 
preopen_indexes = 0 
# 是否释放旧的索引文件 
unlink_old = 1 
# MVA跟新池大小(默认为1M) 
mva_updates_pool = 1M 
# 最大允许的网络包大小(默认8M) 
max_packet_size = 8M 
# 每个查询最大允许的过滤器数量(默认256) 
max_filters = 256 
#每个过滤器最大允许的值的个数(默认4096) 
max_filter_values = 4096 
# 每个组的最大查询数(默认为32) 
max_batch_queries = 32 

# Sphinx配置文件结束 

2.5 创建索引



/usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf post1
如果有多个索引就使用参数–all
/usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf –all

2.6开启守护进程 



/usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/sphinx.conf
如果重建索引时守护进程正在运行,需要运行下面的指令 
会重建索引并且重开守护进程
/usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf –all –rotate

2.7 python调用demo


##这样一来就基本配置完成了,然后下面这个简单的demo就是用python来调用sphinx达到查询
import sphinxapi
spc = sphinxapi.SphinxClient()
spc.SetServer(str(’127.0.0.1′),9312)
spc.SetMatchMode(sphinxapi.SPH_MATCH_ANY)
spc.SetLimits(0,5)
res = spc.Query(‘星巴克’)
print res

2.8 总结


难点主要在于sphinx的编译安装,两个报错分别跟libiconv库和gets未声明这两个问题,均可以在谷歌上找到答案。

未来:增量索引

http://www.jianshu.com/p/86b65d981dd2

http://www.cnblogs.com/huifeideyu/p/sphinx.html

https://gist.github.com/ftfniqpl/f96991759ec259a445d4d45cfe716847

 

 

猜您喜欢