Sphinx在Centos(Linux)下的安装和使用(数据源是MySQL)

2018-01-03 20:33:00
linefo
原创
470

需要先了解Sphinx的工作原理:

http://www.linefo.com/index.php/article/28.html


前言


Sphinx在MySQL的应用上有两种方式:

(1)使用插件方式(SphinxSE),即把Sphinx编译成MySQL的插件来使用,这种方式比较复杂。

(2)采用API调用,使用PHP等语言的相应API查询,相对较简单。

一般使用第二种方式。


环境


本教程基于的环境如下:

操作系统:Centos7

数据库:MySQL5.7

编译软件:gcc gcc-c++ autoconf automake


【安装gcc、gcc++】


yum install gcc gcc-c++


【安装autoconf、automake(我这里自带了)


yum install autoconf automake


安装和使用


我的yum源里面含有Sphinx,好像不需要上面的编译软件......

直接使用yum安装:


yum install sphinx


接下来我们要看一下Sphinx的安装后的相关目录/文件(方便配置和使用等),按下面的方式使用rpm命令(如果用yum方式安装)


【目录文件介绍】

/etc/logrotate.d/sphinx  
/etc/sphinx  # 配置目录
/etc/sphinx/sphinx.conf  # 配置文件
/usr/bin/indexer  # 索引生成程序
/usr/bin/indextool 
/usr/bin/search  #  查询测试程序
/usr/bin/searchd  #  查询处理守护进程
/usr/bin/spelldump 
/usr/bin/wordbreaker 
/usr/lib/systemd/system/searchd.service 
/usr/lib/tmpfiles.d/sphinx.conf 
/usr/share/doc/sphinx-2.1.5 
/usr/share/doc/sphinx-2.1.5/COPYING 
/usr/share/doc/sphinx-2.1.5/example.sql  # 测试SQL数据
/usr/share/doc/sphinx-2.1.5/sphinx-min.conf.dist  #  示例简单配置文件
/usr/share/doc/sphinx-2.1.5/sphinx.conf.dist  #  示例标准配置文件
/usr/share/doc/sphinx-2.1.5/sphinx.txt  #  介绍的txt?
/usr/share/man/man1/indexer.1.gz 
/usr/share/man/man1/indextool.1.gz  
/usr/share/man/man1/search.1.gz   
/usr/share/man/man1/searchd.1.gz  
/usr/share/man/man1/spelldump.1.gz  
/var/lib/sphinx  
/var/log/sphinx  # 日志目录 
/var/run/sphinx  # searchd进程相关日志


先往数据库导入测试数据


在sphinx.conf配置文件进行配置


#
# Minimal Sphinx configuration sample (clean, simple, functional)
#

source src1
{
	type			= mysql #数据源,这里是mysql
	sql_host		= localhost # 数据库服务器
	sql_user		= root # 数据库用户
	sql_pass		=  # 数据库密码(这里空密码不能用'')
	sql_db			= test # 数据库
	sql_port		= 3306	# 端口
	sql_query_pre	= SET NAMES utf8 # 在执行sql_query之前执行的查询

	sql_query		= SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents

	sql_attr_uint		= group_id
	sql_attr_timestamp	= date_added
}


index test1
{
	source			= src1
	path			= /var/lib/sphinx/test1
	docinfo			= extern
	charset_type	= sbcs
}


index testrt
{
	type			= rt
	rt_mem_limit	= 32M

	path			= /var/lib/sphinx/testrt
	charset_type	= utf-8

	rt_field		= title
	rt_field		= content
	rt_attr_uint	= gid
}


indexer
{
	mem_limit		= 32M
}

# 搜索服务配置

searchd
{
	listen          = 127.0.0.1:9312 # 监听端口
	listen			= 9306:mysql41
	log				= /var/log/sphinx/searchd.log # 指定监听日志文件
	query_log		= /var/log/sphinx/query.log # 指定查询日志文件
	read_timeout	= 5
	max_children	= 30
	pid_file		= /var/run/sphinx/searchd.pid
	max_matches		= 1000
	seamless_rotate	= 1
	preopen_indexes	= 1
	unlink_old		= 1
	workers			= threads # for RT to work
	binlog_path		= /var/lib/sphinx
}



使用indexer生成索引文件

(test1即配置文件中的 index test1)


开启searchd守护进程


使用search程序进行测试查询:


【数据源】


在PHP中使用


要先安装PHP的Sphinx扩展,这个鬼东西很麻烦,还需要先安装libsphinxclient,再编译安装扩展。

因为我不打算直接用Sphinx,而是准备用coreseek(包含中文词包及中文分词机制的Sphinx,因为原生Sphinx对中文全文索引不是很友好),这个内容留到那篇处理。

传送门:http://www.linefo.com/index.php/article/31.html


【PHP代码】


<?php
	$Sphinx = new SphinxClient(); // 使用Sphinx类
	$Sphinx->SetServer("localhost", 9312); // 服务器地址和端口(端口在Searchd的配置那里)
	$Sphinx->SetMatchMode(SPH_MATCH_ANY); // 设置为 “匹配查询词中的任意一个” 模式
	$Sphinx->SetArrayResult(true); // 设置搜索结果集以数组形式返回
	$result = $Sphinx->query("another", "*"); // 查询字符串和索引名称,*表示所有
	var_dump($result);exit;


如果成功执行(和上面用search程序搜索“another”功能一样,但测试只告诉你在索引中找得到这个东西),会返回一个数组,包含相应的主键。

程序中,我们再用该主键连接数据库查找即可。

文章分类
联系我们
联系人: Mr.Chen
QQ: 185391277