Sphinx-安装和配置
本例是在Linux下, 环境 CentOS6.5 + PHP5.6.8 + MySQL5.6.13 + Sphinx2.3.1-beta
第一种方式是采用API调用, 我们可以使用PHP, Python, Perl, Ruby等编程语言的API函数进行查询, 这种方式不必重新编译MySQL, 模块间改动比较少, 相对灵活
第二种需要重新编译MySQL, 将Sphinx以插件的方式编译到MySQL中去, 这种方式对程序改动比较少, 仅仅需要改动SQL语句即可, 但前提是你的MySQL版本必须在5.1以上
Linux下源码安装:
yum -y install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expat-devel
./configure --prefix /usr/local/sphinx --with-mysql=/usr/local/mysql --enable-id64
make && make install
安装完毕, 目录如下:
bin: 可执行文件目录
indexer 用来生成索引数据, 创建索引, 收集要被检索的数据
searchd 后台进程, 使用 indexer 生成的数据做查询
etc: 配置文件目录
var: 索引等数据存放目录
配置, Sphinx默认使用 etc/sphinx.conf, 如果没有, 则拷贝sphinx.conf.dist一份到sphinx.conf:
#设置主数据源配置, 与增量数据源分开, 避免重复建立索引, 只为增量数据源建立索引即可 source src1 { type = mysql #数据库类型 sql_host = localhost sql_user = root sql_pass = sql_db = test sql_port = 3306 # optional, default is 3306 sql_sock = /tmp/mysqld.sock #如果是Linux下需要开启, 指定sock文件 sql_query_pre = SET NAMES utf8 #预执行语句 sql_query_pre = SET SESSION query_cache_type=OFF #关闭缓存 sql_query = \ SELECT id, title, content FROM post #获取数据的SQL语句 sql_query_info = SELECT * FROM post WHERE id=$id #必须要有 此处id与sql_query中的id键名相同 #sql_attr_uint = group_id #对排序字段进行注释 原自带表中的字段 #sql_attr_timestamp = date_added #对排序字段进行注释 原自带表中的字段 sql_ranged_throttle = 0 } #src1主数据源的增量数据源, 继承主数据源 #source src1throttled : src1 #{ # sql_ranged_throttle = 100 #} #建立主数据索引test1 index test1 { source = src1 #索引的数据源 path = /usr/local/sphinx/var/data/test1 #索引文件所放目录 docinfo = extern dict = keywords mlock = 0 morphology = none min_word_len = 1 html_strip = 0 charset_type = utf-8 charset_table = utf-8 } #主数据索引test1的增量数据索引 #index test1stemmed : test1 #{ # path = /usr/local/sphinx/var/data/test1stemmed # morphology = stem_en #} #建立主数据索引dist1 #index dist1 #{ ## type = distributed # local = test1 # local = test1stemmed # agent = localhost:9313:remote1 # agent = localhost:9314:remote2,remote3 # agent_connect_timeout = 1000 # agent_query_timeout = 3000 #} ##建立主数据索引rt #index rt #{ # type = rt # path = /usr/local/sphinx/var/data/rt # rt_field = title # rt_field = content # rt_attr_uint = gid #} #索引器的配置, 主要用来设置索引器所占内存 indexer { mem_limit = 128M } #服务进程的配置 searchd { listen = 9312 listen = 9306:mysql41 log = /usr/local/sphinx/var/log/searchd.log query_log = /usr/local/sphinx/var/log/query.log read_timeout = 5 client_timeout = 300 max_children = 30 persistent_connections_limit = 30 pid_file = /usr/local/sphinx/var/log/searchd.pid seamless_rotate = 1 preopen_indexes = 1 unlink_old = 1 mva_updates_pool = 1M max_packet_size = 8M max_filters = 256 max_filter_values = 4096 max_batch_queries = 32 workers = threads # for RT to work } common { }
a