php中使用sphinx搜索引擎
sphinx是一个高效的搜索引擎,分词搜索的速度比较快,索引建立存储在硬盘文件,不会干扰数据库,有自己内置的一套数据库。
一. 安装、配置
1.ubuntu安装sphinx
如果没有安装aptitude ,需要先安装 aptitude 因为因为用apt get install 安装下面命令会出现问题.
sudo apt-get install aptitude
sudo aptitude install sphinx3 sphinx3-doc sphinxsearch sphinx-common -y
2.配置
修改配置文件如下
#配置源
source sphinx_t0 #数据库名_数据表名,每配置一个数据表,都需要写上一个配置源
{
type = mysql #数据库类型 sql_host = localhost
sql_user = root
sql_pass = 123123
sql_db = sphinx #指定数据库
sql_port = 3306 # optional, default is 3306
sql_sock = /tmp/mysql.sock #mysql接口 #从数据库之中读取数据的SQL语句设置
#在这里尽可能不使用where或groupby,
#将where与groupby的内容交给sphinx,由sphinx进行条件过滤与groupby效率会更高
#注意:select的字段必须包括一个唯一主键以及要全文检索的字段(可以有多个)、输出的字段。
#where中要用到的字段也要select出来
#例:
#在配置sql语句,可以先写出一句预计要执行的sql语句,然后根据sphinx规定设置
#select * from t0 where description like '%广州%' or name like '%s%'
#=> select id,description,name,age from t0 sql_query = \
SELECT id, name, age, description,group_id,date_added \
FROM t0 sql_attr_uint = age
#使用sql_attr设置的字段(搜索条件),只能作为属性,使用SphinxClient::SetFilter()进行过滤;
#未被设置的字段,自动作为全文检索的字段,使用SphinxClient::Query("搜索字符串")进行全文搜索
#sql_query第一列id需为整数,且被系统使用,无需再设置sql_attr_uint sql_attr_uint = group_id
sql_attr_timestamp = date_added #定义不同类型的字段要用不同的属性名,比如上面的sql_attr_timestamp就是时间戳类型 #sql_query_info = SELECT * FROM documents WHERE id=$id #命令行查询时,从数据库读取原始数据信息
#在执行sql_query前执行的sql命令, 可以有多条
sql_query_pre = SET NAMES utf8 #执行sql字符编码
} #索引,每一源需要一个索引
index sphinx_t0 #索引名字一般与配置源一致
{
source = sphinx_t0 #source 关联源
path = /usr/local/coreseek/var/data/sphinx_t0 #索引文件存放路径,每个索引文件一个
docinfo = extern
charset_dictpath = /usr/local/mmseg/etc/ #指明分词法读取词典文件的位置,当启用分词法时,为必填项。在使用LibMMSeg作为分词 库时,需要确保词典文件uni.lib在指定的目录下
charset_type = zh_cn.utf-8 #字符编码
} #索引,控制所有索引
indexer
{
mem_limit = 512M #内存
} #sphinx守护进程配置
searchd
{
port = 9312 #端口
log = /usr/local/coreseek/var/log/searchd.log
query_log = /usr/local/coreseek/var/log/query.log
read_timeout = 5 #超时
max_children = 30 #最大连接数
pid_file = /usr/local/csft/var/log/searchd.pid #pid文件路径
max_matches = 1000 #max_matches最大匹配数,也就是查找的数据再多也只返回这里设置的1000条
seamless_rotate = 1
preopen_indexes = 0
unlink_old = 1
}
3.执行命令分词,会在/var/lib/sphinxsearch/data/test1 目录下生成一堆索引文件
sudo indexer -c /etc/sphinxsearch/sphinx.conf test1
test1为上述配置文件的index名字
4.命令行测试搜索
sudo search -c /etc/sphinxsearch/sphinx.conf google
二.在php中使用,安装php、sphinx的依赖库
1.安装 aptitude
apt-get install aptitude
sudo aptitude install libsphinxclient-dev libsphinxclient-0.0.1 -y
2.安装php
sphinx的扩展
安装 pecl
sudo apt-get install php-pear php5-dev
在安装sphinx
sudo pecl install sphinx
3.在配置文件php.ini中添加sphinx的扩展,
我的php.ini文件为
sudo vim /etc/php5/fpm/php.ini
获取自己的php.ini文件位置使用
php5-fpm -i|grep ini
添加:
extension=sphinx.so
4.重启php5-fpm,查看php是否加载sphinx模块
sudo /etc/init.d/php5-fpm restart
5.将search程序运行在后台
sudo searchd -c /etc/sphinxsearch/sphinx.conf
默认监听配置文件中的端口:9312
PHP代码:
<?php
header('Content-Type:text/html;charset=utf-8'); //编码为utf-8
$list= array();
if(!empty($_POST)){
$sc = new SphinxClient(); // 实例化Api
$sc->setServer('192.168.169.128', 9312); // 设置服务端,第一个参数sphinx服务器地址,第二个sphinx监听端口
$res = $sc->query($_POST['key'], 'test1'); // 执行查询,第一个参数查询的关键字,第二个查询的索引名称,mysql索引名
称(这个也是在配置文件中定义的),多个索引名称以,分开,也可以用*表示所有索引。
// print_r($sc);
echo '<pre>';
print_r($res);
echo '</pre>';
exit;
}
?>
<form action="" method="post">
<input type="text" name="key" />
<input type="submit" value="提交" />
</form>
php中使用sphinx搜索引擎的更多相关文章
- java中的ElasticSearch搜索引擎介绍。
ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apach ...
- Java中使用elasticsearch搜索引擎实现简单查询、修改等操作-已在项目中实际应用
以下的操作环境为:jdk:1.8:elasticsearch:5.2.0 maven架包下载坐标为: <dependency> <groupId>org.elasticsear ...
- chrome浏览器中的百度搜索引擎总是先自动跳转到百度首页怎么办?
1.修改百度搜索引擎代码如下: http://www.baidu.com/s?wd=%s&ie={inputEncoding} 备注:现在chorme不能直接在默认的百度搜索引擎上修改,而且自 ...
- sphinx搜索引擎架构图
- 开源搜索引擎Sphinx 中启动多个搜索进程的方法(转)
要在同一机器上启动多个sphinx搜索进程searchd,必须为不同的进程指定不同的配置文件(sphinx.conf ),其中搜索进程的端口号不能相同,即 listen = 0.0.0.0:3312 ...
- 开源搜索引擎Sphinx 中启动多个搜索进程的方法
http://blog.163.com/yang_jianli/blog/static/1619900062010316504471/ 要在同一机器上启动多个sphinx搜索进程searchd,必须为 ...
- [搜索引擎]Sphinx的介绍和原理探索
What/Sphinx是什么 定义 Sphinx是一个全文检索引擎. 特性 索引和性能优异 易于集成SQL和XML数据源,并可使用SphinxAPI.SphinxQL或者SphinxSE搜索接口 易于 ...
- sphinx 全文搜索引擎安装与配置
sphinx 全文搜索引擎 sphinx的安装与配置 ------------------------------------------------------------------------- ...
- linux 配置 sphinx 全文搜索引擎
因为公司网站需要,最近在弄sphinx搜索引擎,也是遇到各种问题,最终终于解决了. 服务器系统:centos7 (64位) 详情看安装官网的安装教程进行 coreseek 3.2.14 这里只提一些注 ...
随机推荐
- sql中的等于和不等于, '=' ,'!=','<>','is null'....
不等于:<> ,!=,~= ,^= 这四个符号据说都可以在oracle中表示不等于,但是试了之后发现<> ,!= ,^=是可以的,~=不行,需要注意的是,只有<>是 ...
- 五分钟搞定Go.js
五分钟搞定Go.js 1.基于html5~因为Go.js是一个依赖于HTML5特性的JavaScript库,所以需要确保您的页面声明它是一个HTML5文档,当然需要加载库 <!DOCTYPE ...
- 2018-2019-2 20165205 《网络对抗技术》 Exp6 信息收集与漏洞扫描
2018-2019-2 20165205 <网络对抗技术> Exp6 信息收集与漏洞扫描 实验目标 掌握信息收集的最基本技能与常用工具的方式 实验内容 各种搜索技巧的应用 DNS IP注册 ...
- PHP大神必须养成的十大优良习惯
1.多阅读手册和源代码 没什么比阅读手册更值得强调的事了–仅仅通过阅读手册你就可以学习到很多东西,特别是很多有关于字符串和数组的函数.就在这些函数里面包括许多有用 的功能,如果你仔细阅读手册,你会经常 ...
- apache_php_mysql
软件下载 目前,Apache和PHP均未出现官方的64位版本. Apache 64位: http://www.blackdot.be/?inc=apache/binaries 这个安装文件我已经上传到 ...
- sys模块学习记录
import sys s = sys.argv #命令行参数List,第一个元素是程序本身路径 #sys.exit() #退出程序,正常退出时exit(0) s = sys.version #获取Py ...
- 4-17疑难点 c语言之【结构体对齐】
今天学习了结构体这一章节,了解到了结构体在分配内存的时候采取的是对齐的方式 例如: #include<stdio.h> struct test1 { int a; char b; shor ...
- MM-委外业务
SAP MM-分包业务讲解(subcontracting)-01-主数据与采购订单的创建 SAP MM-分包业务讲解(subcontracting)-02-主数据与采购订单的创建-多BOM的业务情况分 ...
- 调试HDF0308-A50的相机驱动。
使用rk3128做为主芯片: 使用andriod5.1-sdk软件包. 1.在rk3128-86v.dts 中加入头文件 #include "rk3128-cif-sensor.dtsi&q ...
- MemoryStream说明
MemoryStream 是内存流,为系统内存提供读写操作,由于 MemoryStream 是通过无符号字节数组组成的,可以说 MemoryStream 的性能可以算比较出色,所以它担当起了一些其他流 ...