安装(Windows)

1.官方下载

Sphinx下载地址: 下载

2.解压并重命名

此处下载版本为3.0.3,将 sphinx 文件夹命名为sphinx

3.文件夹目录介绍

sphinx
--api(各语言支持的api)
--bin(二进制程序)
--doc(文档说明)
--etc(配置文件:conf/sql)
--misc
--src
# 手动创建以下两个文件夹
--data
--log

4.设置配置文件

(1)将sphinx/etc/sphinx-min.conf.dist文件复制到sphinx/bin/目录下,并重命名为sphinx.conf

注:sphinx/etc/sphinx.conf.dist为带注释的详细的

(2)设置配置项

主要是以下为配置函数:

  • source src1{} --- 连接数据库的基本配置
# 连接的数据库类型
type = mysql
# 连接的数据库主机
sql_host = localhost
# 数据库连接的用户名,默认为test
sql_user = root
# 数据库连接的密码,默认为空
sql_pass =123123
# 连接的数据库名称,默认为test
sql_db = test
# 连接数据库的端口号,默认为3306
sql_port = 3306
# 操作的数据表执行的查询语句
sql_query = \
SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
FROM documents
  • index test1{}
# 索引数据存放目录,默认为/var/data/test1
path = D:\Service\sphinx\data\test1
# 设置中文匹配
min_word_len = 1
charset_type = utf-8
# 指定utf-8的编码表
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
min_word_len = 1
min_prefix_len = 0
min_infix_len = 1
# 开启中文分词支持
ngram_len = 1
# 需要分词的字符
ngram_chars = U+3000..U+2FA1F
  • index test1stemmed : test1{}
# 主要需要修改的配置项,默认为/var/data/test1stemmed
path = D:\Service\sphinx\data\test1stemmed
  • index rt{}
# 主要需要修改的配置项,默认为/var/data/rt
path = D:\Service\sphinx\data\rt
# 指定对哪些字段进行匹配
rt_field = name
rt_field = ename
rt_field = setmeal
rt_field = category
rt_field = country
rt_field = traffic
rt_field = body #
rt_attr_uint = offerid
  • searchd{}
# 自定义日志文件位置
log = D:\Service\sphinx\log\searchd.log
query_log = D:\Service\sphinx\log\query.log
pid_file = D:\Service\sphinx\log\searchd.pid

以下几项不需要修改默认值,即可直接使用

  • source src1throttled : src1{}

分布式索引的相关配置,没有则可以不修改

  • index dist1{}

  • indexer{}

  • common{}

5.操作数据库,导入样例数据

(1)进入到mysql命令行,执行命令

D:\phpStudy\PHPTutorial\MySQL\bin>mysql -uroot -p
Enter password: *************
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.5.53 MySQL Community Server (GPL) mysql> use test; # 恢复样例数据到数据库
mysql> source /D:\Service\sphinx\etc/eaxmple.sql # 新增两个数据表,documents和tags
mysql> show tables;
documents
tags

6.生成索引文件

cmd命令行进入到sphinx/bin/目录下

# 生成索引文件
> indexer.exe --config sphinx.conf --all
Sphinx 3.0.3-dev (commit facc3fb)
Copyright (c) 2001-2018, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com) using config file 'sphinx.conf'...
WARNING: key 'docinfo' was permanently removed from Sphinx configuration. Refer to documentation for details.
WARNING: key 'dict' was permanently removed from Sphinx configuration. Refer to documentation for details.
WARNING: key 'mva_updates_pool' was permanently removed from Sphinx configuration. Refer to documentation for details.
indexing index 'test1'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 0.2 Kb
total 1.0 sec, 0.2 Kb/sec, 3 docs/sec
indexing index 'test1stemmed'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 0.2 Kb
total 1.0 sec, 0.2 Kb/sec, 3 docs/sec
skipping non-plain index 'dist1'...
skipping non-plain index 'rt'...

【注】新版sphinx的bin目录下已经没有search.exe程序,所以不能直接在命令行执行返回结果,只能使用api接口返回数据。

7.开启搜索服务,保持后台运行

> searchd.exe --pidfile

[Tue May 15 09:02:14.690 2018] [7776] using config file './sphinx.conf'...
listening on all interfaces, port=9312
listening on all interfaces, port=9306
Sphinx 3.0.3-dev (commit facc3fb)
Copyright (c) 2001-2018, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)

PHP开启sphinx扩展

1.下载php_sphinx扩展: 前往

具体需要下载的版本需要查看phpinfo信息:

Architecture         ==》x86/x64
PHP Extension Build ==》NTS/NS

下载并解压后,将php_sphinx.dll文件放到php/ext目录下

2.修改php.ini配置文件

# 在 Dynamic Extensions 列表中添加php_sphinx扩展
extension=php_sphinx.dll

修改后重启apache服务

3.在phpinfo.php输出的信息中查看sphinx扩展是否安装成功

            sphinx
sphinx support enabled
Version 1.3.2
Revision $Revision$

代码实现

1.样例数据表test.documents记录:

 id   group_id   group_id2   date_added             title             content
1 1 5 2018-05-14 09:12:25 test one this is my test document number one. also checking search within phrases.
2 1 6 2018-05-14 09:12:25 test two this is my test document number two
3 2 7 2018-05-14 09:12:25 another doc this is another group
4 2 8 2018-05-14 09:12:25 doc number four this is to test groups

2.PHP代码实现

一般实现

<?php
require('sphinxapi.php'); $sphinx = new SphinxClient();
$sphinx->SetServer('localhost',9312);
$sphinx->SetMatchMode(SPH_MATCH_ANY);
$sphinx->SetArrayResult ( true );
$res = $sphinx->Query($_GET['key'],'*');
var_dump($res);

thinkphp5使用介绍

1.将sphinxapi.php文件放到extend目录下

2.在控制器方法中使用(app/api/index)

public function test()
{
$sphinx = new \SphinxClient();
// sphinx的主机名和端口
$sphinx->SetServer('localhost',9312);
// 匹配模式
$sphinx->SetMatchMode(SPH_MATCH_ANY);
// 设置返回结果集为php数组格式 $sphinx->SetArrayResult ( true );
$res = $sphinx->Query(input('key'),'*');
var_dump($res);
}

3.url访问:

http://localhost/mypro/api/index/test?key=test

4.输出数据

D:\web\COD\api\application\api\controller\Index.php:21:
array (size=10)
'error' => string '' (length=0)
'warning' => string '' (length=0)
'status' => int 0
'fields' =>
// 查询显示的字段名
array (size=2)
0 => string 'title' (length=5)
1 => string 'content' (length=7)
'attrs' =>
array (size=2)
'group_id' => string '1' (length=1)
'date_added' => string '2' (length=1)
'matches' =>
// 匹配的结果,返回匹配记录的id和权重(权重越大,匹配条件越多)
array (size=3)
0 =>
array (size=3)
'id' => string '1' (length=1)
'weight' => int 2421
'attrs' =>
array (size=2)
...
1 =>
array (size=3)
'id' => string '2' (length=1)
'weight' => int 2421
'attrs' =>
array (size=2)
...
2 =>
array (size=3)
'id' => string '4' (length=1)
'weight' => int 1442
'attrs' =>
array (size=2)
...
'total' => int 3
'total_found' => int 3
'time' => float 0
'words' =>
array (size=1)
'test' =>
array (size=2)
'docs' => int 6
'hits' => int 10

在ThinkPHP5项目中应用

1.修改配置信息sphinx/bin/sphinx.conf

source src1{
# 省略其他配置
sql_user = root
sql_pass = 123123
sql_db = shopMall
sql_query = \
SELECT id,offerid, name, ename, setmeal, category, country, traffic, os, body, inventory_title, shop \
FROM i_offer
sql_attr_uint = offerid
# 省略其他配置
}
index rt
{
type = rt
path = D:\Service\sphinx\data\rt rt_field = name
rt_field = ename
rt_field = setmeal
rt_field = category
rt_field = country
rt_field = traffic
rt_field = body rt_attr_uint = offerid
}

2.生成索引,并开启searchd服务

# 生成项目索引
sphinx/bin/indexer.exe --config sphinx.conf --all # 开启服务 &表示后台开启,不用保持窗口执行状态
sphinx/bin/searchd.exe &

3.程序实现

sphinx查询返回的结果并不是我们需要的显示结果,所以还需要对结果进行处理,从而获取到我们需要的结果。

默认sphinx返回的数据中包含id信息是和数据记录的信息是相关的,所以我们需要通过id到数据库中查询相关信息。

public function test()
{
$s = new \SphinxClient;
$s->setServer("localhost", 9312);
// 作为数组返回
$s->SetArrayResult(true);
// 匹配格式 任意匹配
$s->setMatchMode(SPH_MATCH_ANY);
$s->setMaxQueryTime(3);
// input()表示接收用户传过来的数据
$result = $s->query(input('key'),'*'); return json($result);
}

4.测试实现

访问url:

http://localhost/mypro/api/index/test?key=官方

返回结果:


D:\web\COD\api\application\api\controller\Index.php:22:
array (size=10)
'error' => string '' (length=0)
'warning' => string '' (length=0)
'status' => int 0
'fields' =>
array (size=10)
0 => string 'name' (length=4)
1 => string 'ename' (length=5)
2 => string 'setmeal' (length=7)
3 => string 'category' (length=8)
4 => string 'country' (length=7)
5 => string 'traffic' (length=7)
6 => string 'os' (length=2)
7 => string 'body' (length=4)
8 => string 'inventory_title' (length=15)
9 => string 'shop' (length=4)
'attrs' =>
array (size=1)
'offerid' => string '1' (length=1)
'matches' =>
array (size=6)
0 =>
array (size=3)
'id' => string '36' (length=2)
'weight' => int 4667
'attrs' =>
array (size=1)
...
1 =>
array (size=3)
'id' => string '19' (length=2)
'weight' => int 2611
'attrs' =>
array (size=1)
...
// 此处省略部分数据
'total' => int 6
'total_found' => int 6
'time' => float 0
'words' =>
array (size=2)
'官' =>
array (size=2)
'docs' => int 14
'hits' => int 16
'方' =>
array (size=2)
'docs' => int 70
'hits' => int 94

对结果进行处理

public function test()
{
$s = new \SphinxClient;
$s->setServer("localhost", 9312);
// 作为数组返回
$s->SetArrayResult(true);
// 匹配格式 任意匹配
$s->setMatchMode(SPH_MATCH_ANY);
$s->setMaxQueryTime(3);
// input()表示接收用户传过来的数据
$result = $s->query(input('key'),'*'); // 避免没有匹配记录时报错
if(empty($result['matches'])) {
return null;
} $result = $result['matches'];
// 返回数组中指定的id列, 返回结果为单列数组
$result = array_column($result, 'id');
$list = model('offer')
->field('offerid, name, ename, setmeal, category, country, traffic, os, body, inventory_title, shop')
->where(array('id' => array('in', $result)))
->select(); return json($list);
}

返回结果

[
{
offerid: 2332302,
name: "【官方站】減震隱形增高鞋墊(安全有效~秒增高5公分~)",
ename: "zenggaoxiedian",
setmeal: "日韓超夯,氣墊隱形增高墊,輕鬆增高5公分,透氣減震,抗菌防臭,藝人最愛!【可拆分,自由裁剪,均碼35-44可用】【超殺998三雙】",
category: "[{"id":6,"name":"其他"},{"id":7,"name":"商城"},{"id":8,"name":"家庭用品\n"}]",
country: "[{"id":11,"name":"American Samoa"},{"id":1,"name":"Andorra"},{"id":8,"name":"Angola"},{"id":5,"name":"Anguilla"},{"id":10,"name":"Argentina"},{"id":7,"name":"Armenia"},{"id":12,"name":"Austria"}]",
traffic: "[{"id":2,"name":"16+"},{"id":3,"name":"3G\/4G"},{"id":4,"name":"Adult"}]",
os: "[{"id":1,"name":"3DS System Software"},{"id":2,"name":"Android"},{"id":13,"name":"BeOS"},{"id":16,"name":"CentOS"}]",
body: "123123123",
inventory_title: "隱形增高鞋墊B",
shop: "[{"userid":77912776,"name":"myShop"}]"
},
{
offerid: 3308032,
name: "【官方站】電熱造型梳",
ename: "zaoxingshu",
setmeal: "長/短髮都適用!好梳好上手!亂翹髮尾一秒聽話!【人氣爆红款美髮救星】限時特價,加NT$300再得1件!!!",
category: "[{"id":2,"name":"美容"},{"id":4,"name":"日用品"},{"id":6,"name":"其他"},{"id":8,"name":"家庭用品\n"}]",
country: "[{"id":6,"name":"Albania"},{"id":4,"name":"Antigua And Barbuda"}]",
traffic: "[{"id":3,"name":"3G\/4G"},{"id":5,"name":"Adult Content"},{"id":6,"name":"App Discovery Traffic"}]",
os: "[{"id":3,"name":"Android with AOKP"},{"id":5,"name":"Android with Cyanogen Mod"},{"id":6,"name":"Android with LiquidSmooth"},{"id":7,"name":"Android with MIUI"}]",
body: "123123123"
inventory_title: "NOVA多功能卷髮棒B",
shop: "[{"userid":77912776,"name":"myShop"}]"
}
]

支持简体中文、繁体中文和英文的检索。

暂且实现如此。

参考连接:

  • PHP官方手册使用Sphinx介绍:

http://www.php.net/manual/zh/book.sphinx.php

  • sphinx安装:

https://blog.csdn.net/huang2017/article/details/69665057

https://blog.csdn.net/huang2017/article/details/69666154

  • 将sphinx服务添加到windows服务:

./searchd.exe --install -c sphinx.conf --servicename s

https://blog.csdn.net/design321/article/details/8895712

  • sphinx使用:

https://blog.csdn.net/u010837612/article/details/70827481

  • 中文支持(linux系统)

http://www.xuejiehome.com/blread-1283.html

  • 中文支持(windows系统)

http://www.phpernote.com/php-template-framework/284.html

  • 其他

https://my.oschina.net/guyson/blog/283576

windows7使用Sphinx+PHP+MySQL详细介绍的更多相关文章

  1. Spotlight on Mysql详细介绍

    Spotlight on Mysql详细介绍   by:授客 QQ:1033553122     1. 版本 2. 使用介绍 1) 主页 会话面板 MySQL面板 INNODB面板 存储面板 主机面板 ...

  2. windows7配置Nginx+php+mysql的详细教程

    windows7配置Nginx+php+mysql的详细教程 作者:Vincent.李 字体:[增加 减小] 类型:转载 时间:2016-09-04我要评论 这篇文章主要介绍了windows7配置Ng ...

  3. 推荐收藏 —— MySQL视图详细介绍

    前言:  在MySQL中,视图可能是我们最常用的数据库对象之一了.那么你知道视图和表的区别吗?你知道创建及使用视图要注意哪些点吗?可能很多人对视图只是一知半解,想详细了解视图的同学看过来哟,本篇文章会 ...

  4. 多图文,详细介绍mysql各个集群方案

    目录 多图文,详细介绍mysql各个集群方案 一,mysql原厂出品 二,mysql第三方优化 三,依托硬件配合 四,其它 多图文,详细介绍mysql各个集群方案 集群的好处 高可用性:故障检测及迁移 ...

  5. MySQL视图详细介绍

    前言: 在MySQL中,视图可能是我们最常用的数据库对象之一了.那么你知道视图和表的区别吗?你知道创建及使用视图要注意哪些点吗?可能很多人对视图只是一知半解,想详细了解视图的同学看过来哟,本篇文章会详 ...

  6. MySQL 分区介绍总结

    200 ? "200px" : this.width)!important;} --> 介绍 分区是指根据一定的规则将一个大表分解成多个更小的部分,这里的规则一般就是利用分区 ...

  7. sphinx配置文件sphinx.conf参数详细说明

    sphinx配置文件sphinx.conf参数详细说明 sphinx.conf各个参数详细说明 # # Sphinx configuration file sample # # WARNING! Wh ...

  8. WDCP是什么 关于WDCP的详细介绍

    WDCP是WDlinux Control Panel的简称,是一套用PHP开发的Linux服务器管理系统以及虚拟主机管理系统,,旨在易于使用Linux系统做为我们的网站服务器,以及平时对Linux服务 ...

  9. mysql数据类型介绍

    一.int.bigint.smallint 和 tinyint的区别详细介绍 bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854 ...

随机推荐

  1. JVM垃圾回收器之G1(Garbage First)--new

    相比CMS收集器有两个显著的改进: (1). G1收集器是基于“标记-整理”算法实现的收集器,不会产生空间碎片 (2). 它可以精确地控制停顿,能让使用者明确指定在一个长度为M毫秒的时间片段内,消耗在 ...

  2. WebGIS点要素渲染性能测试

    $('#stationQuery').bind('click', function(){ var drawStyle = $.extend( { }, map.geomap( "option ...

  3. 卷积神经网络(CNN)在语音识别中的应用

    前言 总结目前语音识别的发展现状,dnn.rnn/lstm和cnn算是语音识别中几个比较主流的方向.2012年,微软邓力和俞栋老师将前馈神经网络FFDNN(Feed Forward Deep Neur ...

  4. Flutter隐藏控件方法

    new Offstage( offstage: true, //这里控制 child: Container(color: Colors.blue,height: 100.0,), ),

  5. oracle 网络配置 及 pl/sql 连接配置

    oracle网络配置有三个文件,它们都在D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN 这个文件夹下面,有sqlnet.ora.l ...

  6. Datastage重启服务

    使用DS开发job时,偶尔一个Job出现卡死现象,导致工作不能进展下去,有时候需要重启datastage服务才可以. DataStage在正常运行时候有以下两个主要的进程: (1)dsrpcd(DS的 ...

  7. Oracle EBS AR 更新客户账户层

    declare x_return_status ); x_msg_count NUMBER; x_msg_data ); x_profile_id NUMBER; l_location_id NUMB ...

  8. [EXCEL] 不能清除剪贴板: We couldn't free up space on the clipboard. Another program might be using it right now

    Excel复制粘贴时出现以下错误,原因是有程序占用了剪切板. We couldn't free up space on the clipboard. Another program might be ...

  9. Redis搜索引擎设计

    以下图片是基于自身对知识掌握的基本能力而画出的,并没有系统全面的读过活跃于互联网大牛的著作(个人认为那样会限制自身的思维空间),因此,若图片里存在错误,敬请批评指正,谢谢! 除非互联网项目,传统的制造 ...

  10. 从一个简单的 JPA 示例开始

    本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示例:接着重构该示例,并引入 Sp ...