一、安装Sphinx
1、下载Sphinx相应的版本 (http://sphinxsearch.com/downloads/archive/)
2、命令:tar zxvf +压缩包文件名 解压相应的文件
3、进入Sphinx版本文件 编译安装:
-
./configure --prefix=/data/app/sphinx --with-mysql --with-python --enable-id64
-
注意编译扩展注意路径:
1. --prefix= (php安装路径,注意要先创建文件并且更改相应的文件权限, 修改组用户权限命令sudo chmod –R :staff+文件名)
4、make
5、make install
二、配置.conf文件
1、cd /data/app/sphinx/etc
2、touch sphinx.conf
注意:sphinx.conf.dist是配置模板,可以使用cp sphinx.conf.dist sphinx.conf然后在sphinx.conf上修改配置,或者直接新建sphinx.conf文件
* 附加sphinx.conf配置
```
source src1
{
# 数据源类型 mysql,pgsql,mssql,xmlpipe,xmlpipe2,odbc
type = mysql
# -------------------------连接sql数据源的一些配置-------------------------
sql_host = localhost ###### mysql主机
sql_user = root ###### mysql用户名
sql_pass = root ###### mysql密码
sql_db = browser ###### mysql数据库名
sql_port = 3306 ###### optional, default is 3306 mysql端口
#-----------------------------sql 相关配置-----------------------------
sql_query = \
SELECT Id, UserAgent, Language, Languages, Platform, Plugins, Vendor, Product, MaxTouchPoints, DevicePixelRatio, Width, Height UNIX_TIMESTAMP(CreateTime) AS CreateTime FROM brow
# uint无符号整型属性
sql_attr_uint = Id
# 布尔值属性
# sql_attr_bool = is_deleted
# 长整型属性(有负数用 bigint)
# sql_attr_bigint = my_bigint_id
#----------------------------字段属性的配置(用于过滤和排序)----------------------------
# 时间戳属性,经常被用于做排序
sql_attr_timestamp = CreateTime
# 字符串排序属性。一般我们按照字符串排序的话,我们会将这个字符串存下来进入到索引中,然后在查询的时候比较索引中得字符大小进行排序。
# 但是这个时候索引就会很大,于是我们就想到了一个方法,我们在建立索引的时候,先将字符串值从数据库中取出,暂存,排序。
# 然后给排序后的数组分配一个序号,然后在建立索引的时候,就将这个序号存入到索引中去。这样在查询的时候也就能完成字符串排序的操作。
# 这,就是这个字段的意义。
# sql_attr_str2ordinal = author_name
# 浮点数属性
# sql_attr_float = lat_radians
# sql_attr_float = long_radians
# 字符串属性
# sql_attr_string = stitle
# 文档词汇数记录属性。比如下面就是在索引建立的时候增加一个词汇数的字段
# sql_attr_str2wordcount = stitle
}
index brow
{
# 索引类型,包括有plain,distributed和rt。分别是普通索引/分布式索引/增量索引。默认是plain。
type = plain
# 索引数据源
source = src1
# 索引文件存放路径
path = /data/app/sphinx/var/data/brow
# 缓冲内存锁定。
# searchd会讲spa和spi预读取到内存中。但是如果这部分内存数据长时间没有访问,则它会被交换到磁盘上。
# 设置了mlock就不会出现这个问题,这部分数据会一直存放在内存中的。
mlock = 0
# 词形处理器
# 词形处理是什么意思呢?比如在英语中,dogs是dog的复数,所以dog是dogs的词干,这两个实际上是同一个词。
# 所以英语的词形处理器会讲dogs当做dog来进行处理。
morphology =
# 最小索引词长度,小于这个长度的词不会被索引。
min_word_len = 1
# html标记清理,是否从输出全文数据中去除HTML标记。
html_strip = 0
# 字符表和大小写转换规则
# 'sbcs' default value is 单字节字符集
# charset_table = 0..9, A..Z->a..z, _, a..z, U+A8->U+B8, U+B8, U+C0..U+DF->U+E0..U+FF, U+E0..U+FF
# 'utf-8' default value is 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,min_infix_len,prefix_fields,infix_fields都是在enable_star开启的时候才有效果。
# 最小前缀索引长度
# 为什么要有这个配置项呢?
# 首先这个是当启用通配符配置启用的前提下说的,前缀索引使得一个关键词产生了多个索引项,导致索引文件体积和搜索时间增加巨大。
# 那么我们就有必要限制下前缀索引的前缀长度,比如example,当前缀索引长度设置为5的时候,它只会分解为exampl,example了。
min_prefix_len = 0
# 最小索引中缀长度。理解同上。
# min_infix_len = 0
## 前缀索引和中缀索引字段列表。并不是所有的字段都需要进行前缀和中缀索引。
# prefix_fields = filename
# infix_fields = url, domain
# N-Gram索引的分词技术
# N-Gram是指不按照词典,而是按照字长来分词,这个主要是针对非英文体系的一些语言来做的(中文、韩文、日文)
# 对coreseek来说,这两个配置项可以忽略。
ngram_len = 1
ngram_chars = U+3000..U+2FA1F
}
indexer
{
# 建立索引的时候,索引内存限制
mem_limit = 128M
}
searchd
{
# 监听端口
listen = 9312
listen = 9306:mysql41
# 监听日志路径
log = /data/app/sphinx/var/log/searchd.log
# 查询日志路径
query_log = /data/app/sphinx/var/log/query.log
# 客户端读超时时间
read_timeout = 5
# 客户端持久时间
client_timeout = 300
# 并行执行搜索的数目
max_children = 30
#进程 pid 文件
pid_file = /data/app/sphinx/var/log/searchd.pid
#当进行索引轮换的时候,可能需要消耗大量的时间在轮换索引上。
#启动了无缝轮转,就以消耗内存为代价减少轮转的时间
seamless_rotate = 1
#索引预开启,强制重新打开所有索引文件
preopen_indexes = 1
#索引轮换成功之后,是否删除以.old为扩展名的索引拷贝
unlink_old = 1
#多处理模式(MPM)。 可选项;可用值为none、fork、prefork,以及threads。 默认在Unix类系统为form,Windows系统为threads。
workers = threads # for RT to work
binlog_path = /data/app/sphinx/var/data
}
```
三、 生成索引
1、/data/app/sphinx/bin/indexer --all
四、 打开 sphinx 进程
1、/data/app/sphinx/bin/searchd