之前有写过sphinx的简单使用, 初次接触sphinx的同学可以先了解下, windows和linux都有
- Linux下安装sphinx及配置
- Windows下安装sphinx及配置
本文记录以下如何在sphinx的配置文件sphinx.conf
中, 配置多个索引, 并启动服务
修改配置文件
原配置文件
找到sphinx.conf配置文件, 假设当前已经有一个索引已经配置ok, 那么你的文件打开后应该类似这样的,其中数据源为article_source,对应文章表, 索引名称为article,对应article_source
source article_source
{
type = mysql
sql_host = SQLHOST
sql_user = username
sql_pass = password
sql_db = DBNAME
sql_port = 3306 # optional, default is 3306
sql_query_pre = SET NAMES utf8
sql_query = \
SELECT id, title, content \
FROM tablename
}
index article
{
source = article_source # 对应上面source的名称
path = /sphinx/article_data
min_word_len = 1
ngram_len = 1
ngram_chars = U+3000..U+2FA1F
}
indexer
{
mem_limit = 512M
}
searchd
{
listen = 9312
listen = 9306:mysql41
log = /sphinx/searchd.log
query_log = /sphinx/query.log
read_timeout = 5
max_children = 30
pid_file = /sphinx/searchd.pid
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
binlog_path = /sphinx/data
}
现在我们有一个新表, 假设为音乐表, 我们需要根据歌曲名称, 和歌词来匹配对应的歌曲, 供用户去搜索, 也需要使用sphinx, 那么我们应该如何做呢?
构建新数据源
打开sphinx.conf文件, 在article_source数据源的下方, 声明下新的音乐数据源
source music_source
{
type = mysql
sql_host = SQLHOST
sql_user = username
sql_pass = password
sql_db = DBNAME
sql_port = 3306 # optional, default is 3306
sql_query_pre = SET NAMES utf8
sql_query = \
SELECT id, name, lyric \
FROM music
}
配置index
在index article下方, 构建音乐数据源的索引
index music
{
source = music_source # 对应上面source的名称
path = /sphinx/music_data
min_word_len = 1
ngram_len = 1
ngram_chars = U+3000..U+2FA1F
}
这里要注意一下, 两个索引的path不能在同一个目录下, 也有可能是我操作有误, 放在同一目录下面一直报错
至此, 配置文件就配置好了
重新构建索引
停止searchd服务
构建索引时需要停掉运行中的searchd服务, 不然会失败, 原索引如果正在使用中, 请谨慎停止, 或者研究一下--rotate
参数
--rotate
用于轮换索引,在不停止服务的时候(searchd运行时)增加索引;searchd运行时不加会报错。
停止searchd命令:
searchd -c source.conf --stop
重建索引
命令:
indexer -c sphinx.conf -all
启动searchd服务
searchd