准备:centos6.5 lnmp 环境
下载 sphinx的最新版本Sphinx 2.2.11-release
开始安装
tar xf sphinx-2.2.11-release.tar.gz
cd sphinx-2.2.11-release
./configure –prefix=/usr/local/sphinx –with-mysql
make && make install
安装完毕后把测试数据导入数据库。
首先创建数据库 lampol
create database lampol;
导入事先准备好的sql语句(随便找了几个文章),表结构如下。
数据导入完毕,开始配置sphinx。
cd /usr/local/sphinx/etc/
cp sphinx.conf.dist sphinx.conf
修改配置文件如下
source articles
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = 123456
sql_db = lampol
sql_sock = /tmp/mysql.sock
sql_query_pre = SET NAMES utf8
sql_query_pre = SET SESSION query_cache_type=OFF
sql_query = SELECT id,auth_id,title,title as attr_title,content,content as attr_content FROM article
sql_attr_uint = auth_id
sql_attr_string = attr_title
sql_attr_string = attr_content
sql_ranged_throttle = 0
}
index article
{
source = articles
path = /usr/local/sphinx/ var /data/article
docinfo = extern
dict = keywords
mlock = 0
morphology = none
min_word_len = 1
ngram_len = 1
ngram_chars = U+3000..U+2FA1F
html_strip = 0
}
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
}
配置完毕,开始生成索引文件
/usr/local/sphinx/ bin /indexer –all
报错:
/usr/local/sphinx/bin/indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
解决:
ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /lib64/libmysqlclient.so.18
再次运行成功。
开始运行后台searchd
开始测试。把两个文件复制到根目录下。
cp /home/sphinx-2.2.11-release/ api /sphinxapi.php /usr/local/ nginx /html/
cp /home/sphinx-2.2.11-release/api/test.php /usr/local/nginx/html/
开始进行搜索
会发现已经有一个匹配成功
然后进行页面的搜索
php代码:
<?php
require ( “sphinxapi.php” );
$cl = new SphinxClient ();
$q = $_POST[‘keywords’];
$host = “localhost”;
$port = 9312;
$index = “article”;
$ranker = SPH_RANK_PROXIMITY_BM25;
$cl->SetServer ( $host, $port );
$cl->SetConnectTimeout ( 1 );
$cl->SetArrayResult ( true );
$cl->SetRankingMode ( $ranker );
$res = $cl->Query ( $q, $index );
echo ‘<pre>’;
var_dump($res[‘matches’]);
echo ‘</pre>’;
页面开始搜索迪拜
返回搜索后的结果
至此已经完毕,其他更多功能大家可以进一步去探索。