windows7使用Sphinx+PHP+MySQL详细介绍

安装(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             content1    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 two3    2             7        2018-05-14 09:12:25   another doc        this is another group4    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  = rtpath  = D:\Service\sphinx\data\rtrt_field  = namert_field  = enamert_field  = setmealrt_field  = categoryrt_field  = countryrt_field  = trafficrt_field  = bodyrt_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

转载于:https://www.cnblogs.com/zqunor/p/9045267.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php layout布局文件,layout(布局) - jQuery EasyUI中文文档 - EasyUI中文站

Layout(布局)使用$.fn.layout.defaults重写默认值对象。布局容器有5个区域&#xff1a;北、南、东、西和中间。中间区域面板是必须的&#xff0c;边缘的面板都是可选的。每个边缘区域面板都可以通过拖拽其边框改变大小&#xff0c;也可以点击折叠按钮将面板折叠起来。布局可以进…

Bootstrap系列 -- 11. 基础表单

表单主要功能是用来与用户做交流的一个网页控件&#xff0c;良好的表单设计能够让网页与用户更好的沟通。表单中常见的元素主要包括&#xff1a;文本输入框、下拉选择框、单选按钮、复选按钮、文本域和按钮等。其中每个控件所起的作用都各不相同&#xff0c;而且不同的浏览器对…

python excel centos_centos中使用python遇到的几个问题

用python搞了一个从excel中读取cobbler节点信息并加入cobbler中的脚本&#xff0c;运行的过程中出了不少问题&#xff0c;这里记录下来&#xff0c;方便日后查找&#xff01;一、yum install python&#xff0c;我通过这个命令安装python&#xff0c;默认安装的是2.6的版本&…

oracle集群监听启动,在RAC中lsnrctl和srvctl操作监听区别

朋友今天询问了一个问题RAC中使用srvctl 操作监听和lsnrctl 操作监听结果不一样&#xff0c;下面我通过实验说明问题0.listener.ora文件内容LISTENER_RAC1 (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST rac1-vip)(PORT 1521)(IP FIRST))(ADDRESS (PROTO…

how to use webpart container in kentico

https://docs.kentico.com/k11/developing-websites/developing-websites-using-the-portal-engine/using-web-part-containers Webpart Container webpart container中的orangebox, SELECT * FROM dbo.CMS_WebPartContainer WHERE ContainerDisplayName LIKE %orange%; 把…

IE通过推理IE陈述的版本号

样例&#xff1a; 1. <!--[if !IE]> 除IE外都可识别 <![endif]--> 2. <!--[if IE]> 全部的IE可识别 <![endif]--> 3. <!--[if IE 5.0]> 仅仅有IE5.0能够识别 <![endif]--> 4. <!--[if IE 5]> 仅IE5.0与IE5.5能够识别 <![endif]--…

自己调试接口遇到的错误记录

200 请求成功500 请求失败 失败原因在http body里面403 未认证404 服务未找到 转载于:https://www.cnblogs.com/ruixin-jia/p/5734767.html

excel如何找到高频词_拟录取后:应届生和往届生档案哪里找;重灾院校区;高频词背诵表...

今日消息1、应届生和往届生档案哪里找&#xff1f;2、重灾院校区3、考研云督学班高频词背诵表汇总1、应届生和往届生档案哪里找&#xff1f;往年这个时候论文答辩、复试已经结束&#xff0c;已经进入毕业季&#xff01;现在你们毕业答辩结束了吗&#xff1f;你们都顺利上岸吗&a…

oracle 中表,oracle中表操作

1.1&#xff1a;创建一表空间 TABLESPACE01,初始大小50MB,允许自动增长数据库文件,每次增长10MBCREATE TABLESPACE TABLESPACE01LOGGINGDATAFILE’F:\TABLESPACE\DATA01.DBF’ SIZE 50MREUSE AUTOEXTEND ON NEXT 10M;1.2:创建用户 (oracle12c)此处创建用户报错&#xff0c;原因…

UDP Ping程序实现--第2关:接收并转发消息

✨创作不易&#xff0c;还希望各位大佬支持一下 &#x1f44d; 点赞&#xff0c;你的认可是我创作的动力&#xff01; ⭐️ 收藏&#xff0c;你的青睐是我努力的方向&#xff01; ✏️ 评论&#xff0c;你的意见是我进步的财富&#xff01; 任务描述 本关任务&#xff1a;在…

JAVA经典题--死锁案例

死锁原理: 两个线程相互等待对方释放同步监视器 例子程序: 1 public class TestDeadLock implements Runnable {2 3 public int flag 1;4 static Object o1 new Object(), o2 new Object();5 6 public void run() {7 if (flag 1) {8 s…

考研编程练习----排名

题目描述&#xff1a;今天的上机考试虽然有实时的Ranklist&#xff0c;但上面的排名只是根据完成的题数排序&#xff0c;没有考虑每题的分值&#xff0c;所以并不是最后的排名。给定录取分数线&#xff0c;请你写程序找出最后通过分数线的考生&#xff0c;并将他们的成绩按降序…

linux下安装dovecot

Dovecot是一个开源的&#xff0c;为Linux/Unix-like系统提供IMAP,POP3服务的软件。主要是为了安全产生的&#xff0c;不管大小应用&#xff0c;Dovecot都是一个非常优秀的选择。它非常快&#xff0c;配置简单&#xff0c;不需要专业的管理员&#xff0c;而且它也非常节省内存。…

放大镜_指甲钳上有放大镜?再也不怕夹到肉了

扒姬说&#xff1a;剪指甲钳最害怕什么&#xff0c;是没注意夹到肉有没有。尤其是近视的人和手脚不便的老人&#xff0c;或者是给较小的宝宝剪指甲时&#xff0c;总是看不清指甲边缘的形状、刀口的位置&#xff0c;一不小心就会夹到手指、脚趾。今天&#xff0c;扒姬推荐一个特…

linux学习规划

转载于:https://www.cnblogs.com/Alight/p/4601510.html

oracle如何在本地建库,oracle在本地建库

oracle数据库本地建库&#xff0c;需要使用oracle安装路径下面的-配置和移植工具-Database Configuration Assistant 通过一次点击下一步进行建库。 在库建好后&#xff0c;使用系统账号 User:sys password:sys Connect as SYSDBA在客户端进行登录 --创建表空间 Create tablesp…

「BZOJ1485」[HNOI2009] 有趣的数列 (卡特兰数列)

「BZOJ1485」[HNOI2009] 有趣的数列 Description 我们称一个长度为2n的数列是有趣的&#xff0c;当且仅当该数列满足以下三个条件&#xff1a; (1)它是从1到2n共2n个整数的一个排列{ai}&#xff1b; (2)所有的奇数项满足a1<a3<…<a2n-1&#xff0c;所有的偶数项满足a2…

wedo2.0编程模块介绍_能量黑科技模块系列十:RFID魔块

RFID魔块RFID此模块可以对套件配套的RFID卡或者空白RFID卡进行读写&#xff0c;用于权限验证的DIY制作。常规的公交卡、地铁卡是无法进行写入&#xff0c;但可以读取UID号。配套RFID卡内存为1K&#xff0c;有16个分区&#xff0c;每个分区有3个数据块可进行写入此模块可以对套件…

Android 6.0权限问题

Android 6.0 open failed: EACCES (Permission denied) 对于6.0权限问题&#xff0c;报错如上&#xff1a; 解决方案&#xff1a; Android 6.0 (Marshmallow). 添加新的权限模型&#xff0c;需要在运行时动态获取所需要的权限。 首先判断手机系统版本是否在6.0然后才是支持运行…

[SoapUI] 通过SoapUI发送POST请求,请求的body是JSON格式的数据

通过SoapUI发送POST请求&#xff0c;请求的body是JSON格式的数据&#xff1a; data{"currentDate":"2015-06-19","reset":true} 而且通过Fiddler抓取页面报文 Content-Type 是 application/x-www-form-urlencoded 一开始我将Content-Type appl…