Spinx环境搭建

前言

之前存了很多文本数据 - 具体是啥就不说了

很早之前就想对其内容进行检索了,自己写一个又觉得太麻烦,而且效率估计还低下。

百度搜了下又ELK和Spinx这2个方案,都测试了下,ELK太大了,感觉要花费好多时间去了解,Spinx暂时应该能满足我的需求了。

加上最近觉得自己挺久没写博客了,将这次搭建Spinx文本检索环境的过程记录下来。

环境搭建

1.从官网下载sphinx-3.1.1,我使用的是这个版本。

2.将etc目录下的sphinx-min.conf.dist配置文件复制到Bin下面,命名为sphinx.conf。

3.配置如下,该配置支持中文。

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
source src1
{
type = mysql

sql_host = localhost
sql_user = root
sql_pass = root
sql_db = sheg
sql_port = 3306 # optional, default is 3306
sql_query_pre = set charset utf8
sql_query = \
SELECT id, mail, name, idcard, passwd, phone, mail2 \
FROM `12306`
sql_attr_uint = group_id
sql_attr_timestamp = date_added
}


index sk12306
{
source = src1
path = F:\sk\sphinx-3.1.1\data\sk12306\
# 设置中文匹配
min_word_len = 1
# 指定字符集(已废弃)
charset_type = utf-8
# 指定utf-8的编码表
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
min_prefix_len = 0
min_infix_len = 3
# 开启中文分词支持
ngram_len = 1
# 需要分词的字符
ngram_chars = U+3000..U+2FA1F
}


index rt
{
type = rt
rt_mem_limit = 128M
path = F:\sk\sphinx-3.1.1\data\testrt\
rt_field = name
rt_field = idcard
rt_field = mail
rt_field = passwd
rt_field = mail_2
rt_field = phone
rt_attr_uint = gid
}


indexer
{
mem_limit = 128M
}


searchd
{
listen = 9312
listen = 9306:mysql41
log = F:\sk\sphinx-3.1.1\log\searchd.log
query_log = F:\sk\sphinx-3.1.1\log\query.log
read_timeout = 5
max_children = 30
pid_file = F:\sk\sphinx-3.1.1\log\searchd.pid
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
workers = threads # for RT to work
binlog_path = F:\sk\sphinx-3.1.1\log
}

查询指定列 idcard: @idcard xxxxxxx
模糊查询 352225*
中文默认模糊查询

4.将某库代码放到PHP下运行就可以了。

那么问题了,先整理数据还是把某库修改成适合我的文本查询器呢。