Sphinx的安装和使用

作者:吴泽鑫 分类: Sphinx全文检索 发布于:2016-4-4 15:53 ė2221次浏览 62条评论

1、本次用的是 Sphinx 2.2.10-release版本,先到官网下载对应的源码安装包:http://sphinxsearch.com/files/sphinx-2.2.10-release.tar.gz

2、解压、安装:

tar zxf ./sphinx-2.2.10-release.tar.gz 
cd sphinx-2.2.10-release
./configure --prefix=/usr/local/webserver/sphinx --with-mysql=/usr/local/webserver/mysql/
make
make install

3、命令了解

在sphinx的bin目录下的重要3个命令:

indexer:创建索引命令

searchd:启动进程命令

search:命令行搜索命令

4、准备mysql的数据

在安装sphinx之前,需要把mysql安装好,并且确保能使用。

首先,先在test数据库中,创建张post表:

use test;
create table post (id int unsigned auto_increment primary key, title varchar(240), content text); 
mysql> desc post;
+---------+------------------+------+-----+---------+----------------+
| Field   | Type             | Null | Key | Default | Extra          |
+---------+------------------+------+-----+---------+----------------+
| id      | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| title   | varchar(240)     | YES  |     | NULL    |                |
| content | text             | YES  |     | NULL    |                |
+---------+------------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
#插入一些数据
insert into post(title,content) values('Linux sphinx1','Linux php sphinx1'); 
insert into post(title,content) values('Linux sphinx2','Linux php sphinx2'); 
mysql> select * from post;
+----+---------------+-------------------+
| id | title         | content           |
+----+---------------+-------------------+
|  1 | Linux sphinx1 | Linux php sphinx1 |
|  2 | Linux sphinx2 | Linux php sphinx2 |
+----+---------------+-------------------+
2 rows in set (0.00 sec)

5、修改sphinx配置文件

cd sphinx/etc/
cp sphinx.conf.dist sphinx.conf
vi sphinx.conf
####配置概要####
#配置一个名字叫main的主数据源,main可以自己定,这里就叫main,把src1修改成main就可以,修改的配置如下:
source main
{
     sql_host                = localhost #mysql主机ip
     sql_user                = test    #mysql用户名
     sql_pass                = 123456  #mysql 密码
     sql_db                  = test   #数据库名
     sql_port                = 3306   #端口
     sql_sock                = /tmp/mysql.sock  #如果是linux下需要开启,指定sock文件
     sql_query_pre           = SET NAMES utf8  #mysql检索编码
     sql_query_pre           = SET SESSION query_cache_type=OFF #关闭缓存
     sql_query= \   #获取数据的sql语句
     SELECT id,title,content FROM post
     #sql_attr_uint          = group_id  #对排序的字段进行注释掉
     #sql_attr_timestamp     = date_added #对排序的字段进行注释掉 
      
}
#今天先不讲增量数据源,先把它关闭
#source src1throttled : src1
#{
#       sql_ranged_throttle     = 100
#}
#接下来配置主数据索引,名字也叫main,把index test1修改下即可

index main
{
     source  = main  #主数据源名称
     path = /usr/local/webserver/sphinx/var/data/main #生成索引的名字,也叫main
      
}

#增量索引和分布式索引也先注释,先不用它
#这里推荐个小技巧,用快的方法加注释
#:set nu
#:627,631s/^/#/g  (给627到631行的代码,添加注释)
#index test1stemmed : test1
#{
#       path                    = /usr/local/webserver/sphinx/var/data/test1stemmed
#       morphology              = stem_en
#}
# index dist1
#{
    #分布式索引也给注释掉
    ....
#}
#接下来修改索引器
indexer
{
    mem_limit               = 128M #(这里是128m,根据实际情况而定)
}
#接下来是searchd
searchd
{
    ...根据默认的就可以,这里不用修改
}
####配置概要####
好了之后,修改配置完毕,保存退出
:x

6、创建索引

sphinx配置完成之后,数据也导进去了,接下来就用下面的命令来创建索引:

创建索引的命令:indexer

-c:指定配置文件

--all:对所有索引重新编制索引

--rotate :用于轮换索引,主要是在不停服务的时候,增加索引

--merge :合并索引

到 sphinx/bin目录下执行:

 ./indexer  --all

这时候,会提示:

./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory

因为,当你的sphinx去利用本机上的mysql客户端去链接数据库服务器的时候,没有找到mysql的语法,要把mysql客户端复制到linux下的 /usr/lib下,让所有程序都能够找到,解决如下:

cp /usr/local/webserver/mysql/lib/libmysqlclient.so.18 /usr/lib/

再执行: ./indexer -all

如果提示:

ERROR: index 'main': sql_query_pre[1]: Query cache is disabled; restart the server with query_cache_type=1 to enable it (DSN=mysql://root:***@localhost:3306/test).

那是因为,mysql的查询缓存没有开启,需要开启一下,修改vi /etc/my.cnf配置文件,添加query_cache_type = 1配置,重启mysql即可。

一切都弄好了之后,./indexer -all会出现以下信息:

[root@promote bin]# ./indexer --all      
Sphinx 2.2.10-id64-release (2c212e0)
Copyright (c) 2001-2015, Andrew Aksyonoff
Copyright (c) 2008-2015, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file '/usr/local/webserver/sphinx/etc/sphinx.conf'...
indexing index 'main'...
WARNING: Attribute count is 0: switching to none docinfo
collected 2 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 2 docs, 60 bytes
total 0.030 sec, 1944 bytes/sec, 64.82 docs/sec
skipping non-plain index 'rt'...
total 3 reads, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
total 9 writes, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg

这样就已经创建索引成功。



本文出自 Jensen-吴泽鑫的博客,转载时请注明出处及相应链接:http://www.wuzexin.cn/post-56.html

评论

  1. andrewcao 2016-05-11 12:47 回复

    请问博主~ Sphinx 2.2.10-release 可以配置中文分词吗? 刚开始接触这块~ 一直搞不懂 这个和 coreseek-4.1 sphinx-for-chinese-2.2.1 的关系和区别在哪里。求指点一二,QQ150367349

    1. 吴泽鑫 2016-05-29 00:55 回复

      @andrewcao:一个是支持中文分词的,一个是不支持的

发表评论

电子邮件地址不会被公开。必填项已用*标注


Ɣ回顶部