sphinx配置多索引

之前有写过sphinx的简单使用, 初次接触sphinx的同学可以先了解下, windows和linux都有

修改配置文件

原配置文件

找到sphinx.conf配置文件, 假设当前已经有一个索引已经配置ok, 那么你的文件打开后应该类似这样的,其中数据源为article_source,对应文章表, 索引名称为article,对应article_source

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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数据源的下方, 声明下新的音乐数据源

1
2
3
4
5
6
7
8
9
10
11
12
13
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下方, 构建音乐数据源的索引

1
2
3
4
5
6
7
8
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命令:

1
searchd -c source.conf --stop

重建索引

命令:

1
indexer -c sphinx.conf -all

启动searchd服务

1
searchd