sphinx && php

  • sphinx简介

       Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎。意图为其他应用提供高速、低空间占用、高结果 相关度的全文搜索功能。Sphinx可以非常容易的与SQL数据库和脚本语言集成。当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式 的XML数据。

Sphinx的特性如下:

  1. 高速的建立索引(在当代CPU上,峰值性能可达到10 MB/秒)
  2. 高性能的搜索(在2 – 4GB 的文本数据上,平均每次检索响应时间小于0.1秒)
  3. 可处理海量数据(目前已知可以处理超过100 GB的文本数据, 在单一CPU的系统上可 处理100 M 文档)
  4. 提供了优秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法
  5. 支持短语搜索
  6. 提供文档摘要生成
  7. 可作为MySQL的存储引擎提供搜索服务
  8. 支持布尔、短语、词语相似度等多种检索模式
  9. 文档支持多个全文检索字段(最大不超过32个)
  10. 文档支持多个额外的属性信息(例如:分组信息,时间戳等)
  11. 支持断词
  12. 快速创建索引:3分钟左右即可创建近100万条记录的索引,并且采用了增量索引的方式,重建索引非常迅速。
  13. 支持分布式搜索,可以横向扩展系统性能
  14. 闪电般的检索速度:尽管是1千万条的大数据量,查询数据的速度也在毫秒级以上,2-4G的文本量中平均查询速度不到0.1秒
  15. 为MySQL设计了一个存储引擎插件,因此如果你在MySQL上使用Sphinx,那简直就方便到家了
  16. 为很多脚本语言设计了检索API,如PHP,Python,Perl,Ruby等,因此你可以在大部分编程应用中很方便地调用Sphinx的相关接口

  • 安装sphinx

A 下载sphinx源码包
在这里插入图片描述
    上面截图的这个网址 复制链接地址 在putty终端使用:`

wget http://sphinxsearch.com/files/sphinx-2.3.1-beta.tar.gz

    注:一般都下载到/usr/local/src目录下
    安装一般都安装到/usr/local/sphinx (sphinx这个目录是自定义的)
    在此目录使用tar命令解压

zxvf sphinx-2.3.1-beta.tar.gz 

B 开始进行编译 注:源代码安装肯定得安装gcc,安装工具包

    安装工具包命令:

yum -y install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expat-devel  

    注:(yum -y 就是不用确定进行安装,不能少装)安装完成不报错就可以进行编译
  安装命令:(- -prefix=安装目录)

./configure   --prefix=/usr/local/sphinx  

安装完成后会告诉你可以进行编译,欢迎使用sphinx
C make 生成编译文件不会进行编译

    make install 进行编译 //警告忽略
 也可以一起执行:make && make install //如果make报错后面make install不会执行
 (开机自启命令:chconfig --level 345 httpd on //Apache开机自启 chconfig --level mysqld 345 on mysql开机自启)
D 测试 进入安装目录

cd /usr/local/sphinx/etc

    先复制一份配置项

sphinx.conf.dist sphinx.conf

    进行配置:

vi sphinx.conf

    如图:(下面会详细讲解配置文件)
在这里插入图片描述
    注:在/usr/local/sphinx/ect这个目录下会有一个sql文件
    如图:
在这里插入图片描述
    把这个sql文件导入数据库
    命令:

mysql -uroot -proot </usr/local/sphinx/etc/example.sql

    执行命令后 进入mysql查看是否导入成功
    下面进行生成索引如图:注:bin目录根据安装的走 这里只是我的
在这里插入图片描述
    ./indexer --all 生成全部索引文件
    ./search 要查询的值
    能查询的到sphinx就恭喜你说明已经安装成功了


  • sphinx配置文件分析

在Sphinx配置文件中,主要包括五个部分:source部分、index部分、searchd部分、indexer部分和common部分(前四部分比较重要);

  • source数据源,数据是从什么地方来的。
  • index索引,当有数据源之后,从数据源处构建索引。索引实际上就是相当于一个字典检索。有了整本字典内容以后,才会有字典检索。
  • searchd提供搜索查询服务。它一般是以deamon的形式运行在后台的。
  • 构建索引的服务。当要重新构建索引的时候,就是调用indexer这个命令。
  • 属性,属性是存在索引中的,它不进行全文索引,但是可以用于过滤和排序。
    配置完成后,创建索引 (前边是索引目录,后边是配置目录)
/usr/local/bin/indexer --rotate --all --config /usr/local/etc/sphinx.conf.dist

如果searchd进程没有在监听,执行了更新,会出现no rotate的提示。如图:
在这里插入图片描述
启动sphinx (可写成一个脚本直接执行 后面路径为sphinx配置文件)

#!/bin/sh
/usr/local/bin/searchd -c /usr/local/etc/sphinx.conf.dist

如果不想全部生成你可以不用–all,分开多个源生成也可以。比如:

/usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf  索引名

没有问题的话一般是这样的。如图:
在这里插入图片描述
可以找个目录写个计划任务进去。比如10min一次:

*/10 * * * * /home/shell/index_sphinx.sh

注 : 配置的详情请参考本人github 点击这里.
注 : 配置案例请参考本人github 点击这里.


  • php端实现sphinx搜索

	$client = new SphinxClient();
    $client->SetConnectTimeout(2);
    $client->SetFilter('product_id', $pro_ids);
    $client->SetFilter('is_pic', [1]);
    $client->SetSortMode(SPH_SORT_ATTR_DESC, 'up_time');
    $client->SetSortMode(SPH_SORT_EXTENDED, 'sort_order desc, sale_num desc, id desc');
    $client->AddQuery($query, 'product2');
    // search sphinx
    $res = $client->RunQueries();
    $matches = $res[0]['matches'];

返回结构大概模样:
在这里插入图片描述

返回数据结构表

值说明
“matches”存储文档ID以及其对应的另一个包含文档权重和属性值的hash表
“total”此查询在服务器检索所得的匹配文档总数(即服务器端结果集的大小,且与相关设置有关)
“total_found”(服务器上找到和处理了的)索引中匹配文档的总数
“words”将查询关键字(关键字已经过大小写转换,取词干和其他处理)映射到一个包含关于关键字的统计数据(“docs”——在多少文档中出现,“hits”——共出现了多少次)的小hash表上。
“error”searchd报告的错误信息
“warning”searchd报告的警告信息

注:SphinxClient类可参考github 点击这里.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值