一、什么是 Sphinx?

Sphinx 是一个基于SQL的全文检索引擎,可以结合 MySQL,PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序

更容易实现专业化的全文检索。Sphinx 特别为一些脚本语言设计搜索 API 接口,如 PHP,Python,Perl,Ruby 等,同时为 MySQL 也设计了一个存储引擎

插件。

Sphinx 单一索引最大可包含1亿条记录,在 1 千万条记录情况下的查询速度为 0.x 秒(毫秒级)。Sphinx 创建索引的速度为:创建 100万 条记录的

索引只需 3~4 分钟。

二、什么时候使用?

在 MySQL 中当对一个文本类型的字段进行LIKE 并以%开头的查询时,会进行全表扫描。

比如我们商品中有商品 500 万件。如果我们要搜索商品名称中带红色的,如果不用 Sphinx 肯定是这样写:

SELECT * FROM php34_goods WHERE goods_name LIKE '%红色%';

  这条 SQL 语句会进行全表扫描,所以性能会非常差,查询速度非常慢

三、Sphinx 的使用方式

Sphinx 有两种使用方法:

1.Sphinx 和 MySQL 是两个独立服务器,如下图所示:

使用方法:

(1) PHP 要先把要搜索的短语发送给 Sphinx 服务器,Sphinx 返回的是记录的ID

(2) PHP 再使用 Sphinx 返回的 ID 查询数据库

2.把 Sphinx 集成到  MySQL 里去(没有单独的 Sphinx 服务器),如下图所示:

PHP 只需要写一个 SQL 语句,让 MySQL 自己连接 Sphinx 查询,如果要使用这种方式需要在 Linux 下重新编译

MySQL,把 Sphinx 当成插件编译到 MySQL 中去

四、Sphinx 安装

1.通过 wget 方式下载软件包,命令如下:

wget http://sphinxsearch.com/files/sphinx-2.1.6-release.tar.gz

  2.加压该压缩包,命令如下:

 tar zxvf sphinx-2.1.6-release.tar.gz

  3.因为使用的是源码包方式安装,需要安装其他支持的相关的类库文件,所以先安装其他类库包文件,命令如下:

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

  4.检测一下当前的环境是否满足安装 Sphinx 的要求并指定安装路径,命令如下:

注意:我们先进入解压后的 Sphinx 源码包,再执行下面的这条命令

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

  出现下图:

5.使用 make && make install 安装,此时仍然在解压后文件夹中

./configure、make、make install 可以对这三个命令了解下

6.到 /usr/local 目录看下是否有刚才指定的 sphinx 目录

五、使用 Sphinx

1.编辑配置文件

先进入 sphinx 的 etc 目录

cd /usr/local/sphinx/etc/

  该目录文件如下图所示:

复制默认配置文件,重新创建一个配置文件,sphinx.conf.dist 完整版默认配置一,有很多内容,在这里选择复制的是 sphinx-min.conf.dist 迷你版,

只要满足基本查询即可

cp /usr/local/sphinx/etc/sphinx-min.conf.dist /usr/local/sphinx/etc/sphinx.conf
vim sphinx.con

  Sphinx 的配置文件在配置的时候容易出错,需要先了解一下几个概念:

-source:数据源,数据是从什么地方来的
-index:索引,当有数据源之后,从数据源处构建索引,索引实际上就是相当于一个字典检索。有了整本字典内容以后,才会有字典检索。
-searchd:提供搜索查询服务,启动 sphinx 服务一般使用 /usr/local/sphinx/bin/searchd -c /usr/local/etc/sphinx.conf
-indexer:构建索引,当需要构建索引的时候就调用indexer这个命令:/usr/local/bin/indexer -c /usr/local/etc/sphinx.conf --all --rotate
-attr:属性,属性是存在索引中的,它不进行全文索引,但是可以进行过滤和排序

编辑完配置文件之后,创建 test 数据库,并把 /usr/local/sphinx/etc/ 目录下的 example.sql 导入数据库中,如下命令:

建立 sphinx 的索引文件

/usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf --all --rotate

如果创建的索引文件比较多而又不需要全部重新生成索引,可以单独生成

/usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf test1
/usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf testrt

  启动 sphinx 服务

/usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/sphinx.conf

如果以前有运行过这个服务,会报错,可以使用 --stop 参数停止服务

/usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/sphinx.conf --stop

服务端配置完成

六、PHP 安装 sphinx 扩展模块

注意:phpsphinx 模块需要 libsphinxclient 支持,否则会出现错误,所以需要先安装 libsphinxclient

libsphinxclient 文件存在于解压后的源码文件的 api 文件夹内

cd sphinx-2.1.6-release/api/libsphinxclient/
./configure -prefix=/usr/local/sphinx/
make && make install

  下载 sphinx , 下载地址:

php7 版本的 sphinx 扩展

https://git.php.net/?p=pecl/search_engine/sphinx.git;a=snapshot;h=339e123acb0ce7beb2d9d4f9094d6f8bcf15fb54;sf=tgz

解压文件

unzip sphinx-339e123.zip

  进入扩展模块源码所在文件夹,然后使用 phpize 命令,生成 configure 文件,扩展文件源文件目录如下:

在该目录下运行 phpize ,如果执行 phpize 之后没有生成 configure 文件,说明没有安装 autoconf,需要执行

如下命令:

yum install autoconf

  如果你不知道 phpize 在哪个目录,可以使用 which phpize,如下:

但是在执行这个命令的时候也会出现一些坑,有的可能会出现:

Can't find PHP headers in /usr/include/php
The php-devel packge is required for use of this command

  看字面意思,可能是没有安装 php-devel 这个扩展包。phpize 是用来扩展 php 扩展模块的,通过 phpize 可以建立

php 的外挂模块,phpize 是属于 php-devel 的内容,所以,需要运行 yum install php-devel ,如下:

看红框部分说明目前 php 的版本和 phpize 不一致,我们看一下 php-devel 的版本:

我的 php 版本是 7.1.24 ,需要安装和当前 php 版本一致的 php-devel,运行 yum -y install php71w-devel

在 sphinx-1.3.3 源码包文件夹下运行 /usr/bin/phpize,目录如下:

配置参数

./configure --with-php-config=/usr/bin/php-config --with-sphinx=/usr/local/sphinx/
make && make install

  到此,扩展模块 sphinx.so 文件生成完成

配置 php.ini 文件,加载 sphinx 扩展

[sphinx]
extension=/usr/lib64/php/modules/sphinx.so

查看 sphinx 模块是否安装成功

重启 apache

编辑文件,查看 phpinfo,验证 sphinx 是否成功安装

七、php 代码测试 sphinx

<?php
$sphinx = new SphinxClient;
$sphinx->setServer("127.0.0.1", 9312);
$sphinx->setMatchMode(SPH_MATCH_ANY);
$sphinx->SetArrayResult ( true );
$result = $sphinx->query("another","test1");
$err = $sphinx->GetLastError();
echo '<pre>';
$products = !empty($result['matches'])?$result['matches']:"";
print_r($products);
if(!empty($err)) {
print_r($result);
}
$result->close();

关于 sphinx 配置文件解析的一篇文章:

https://www.cnblogs.com/yjf512/p/3598332.html

Linux Sphinx 安装与使用的更多相关文章

  1. windows/Linux 下安装coreseek/sphinx

    2013年12月8日 17:26:26 注意的地方: 1.配置文件的 数据源, 索引, 服务 这3处配置的路径要写成windows识别的路径,最好是绝对路径 2.安装windows服务的时候,可以不带 ...

  2. Linux下安装scikit-learn

    Linux下安装scikit-learn sudo apt-get install python-pip sudo apt-get install python-pandas python-sympy ...

  3. sphinx 安装使用

    一.linux(centos)下安装源码包 1.下载  wget http://sphinxsearch.com/files/sphinx-2.3.1-beta.tar.gz 2.安装   切换目录到 ...

  4. Linux下安装 Posgresql 并设置基本参数

    在Linux下安装Postgresql有二进制格式安装和源码安装两种安装方式,这里用的是二进制格式安装.各个版本的Linux都内置了Postgresql,所以可直接通过命令行安装便可.本文用的是Cen ...

  5. Linux下安装Tomcat服务器和部署Web应用

    一.上传Tomcat服务器

  6. Linux下安装使用Solr

    Linux下安装使用Solr 1.首先下载Solr.mmseg4j分词包.tomcat并解压,这用google.百度都可以搜索得到下载地址. 2.因为要使用到中文分词,所以要设置编码,进入tomcat ...

  7. Linux下安装tar.gz类型的jdk,并配置环境变量

    近期因要学习一门技术,必须在Linux下运行,故开始学习如何使用Linux. 在安装jdk时出现了困难,环境变量配置不成功,花了一天时间才搞定,特分享出来,供大家参考. Linux下安装jdk,步骤如 ...

  8. Linux下安装和配置JDK与Tomcat(升级版)

    在这个版本 Linux下安装和配置JDK与Tomcat(入门版) 的基础上优化升级 1.下载相关软件 apache-tomcat-6.0.37.tar.gz jdk-6u25-linux-i586-r ...

  9. Linux下安装cmake

    cmake是一个跨平台的编译工具,特点是语句简单,编译高效,相对于原有的automake更为高效,接下来说明在Linux下安装cmake工具的过程 首先去cmake官网下载cmake安装包,下载界面网 ...

随机推荐

  1. hdu 4544——消灭兔子

    游戏规则很简单,用箭杀死免子即可.  箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对应的伤害值分别为Di(1 <= i <= M),每种箭需要一定的QQ币 ...

  2. 关于Vue懒加载问题

    有关Vue懒加载其实并不是想象的那么难和复杂: 首先引入 import  VueLazyLoad from 'vue-lazyload'; 其次是使用 Vue.use(VueLazyLoad,{ er ...

  3. 剑指offer——python【第31题】整数1出现的次数

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  4. html的空格和换行显示

    一.HTML 代码中的所有连续的空格或空行(换行)都会被显示为一个空格,不管是内容还是标签之间. 二.当我们想让它们在同一行连续显示时,就让所有的代码之间没有空格,也不要换行. 三.当我们想要显示连续 ...

  5. Centos7 安装 Ipython的方法

    环境:Centos7 最小化安装yum源设置:阿里的base源和epel源python版本:2.7.5 yum install -y python2-pip.noarchyum install -y ...

  6. NFC中国-中国第一NFC论坛,NFC中文论坛+NFC技术社区+NFC_电子发烧友网【申明:来源于网络】

    NFC中国-中国第一NFC论坛,NFC中文论坛+NFC技术社区[申明:来源于网络] NFC中国-中国第一NFC论坛,NFC中文论坛:http://nfcchina.org/forum.php NFC技 ...

  7. 如何将AAC音频转换成MP3格式

    我们应该怎样将AAC音频转换成MP3格式呢?AAC是一种专为声音数据设计的文件压缩格式,相对于MP3音频来说更加高效,性价比跟高.但是因为MP3音频格式的通用性,我们还是时常需要将AAC音频转换成MP ...

  8. php直接执行linux 命令

    注意你可以使用的命令只能是php这个用户组的权限和范围,注意这个linux 执行的,windows也是可以对应dos命令,但是打印格式不是很好看 //$output = `ls -al`; //$ou ...

  9. Codeforces 1136 - A/B/C/D/E - (Done)

    链接:https://codeforces.com/contest/1136/ A - Nastya Is Reading a Book - [二分] #include<bits/stdc++. ...

  10. Codeforces 670 - A/B/C/D/E/F - (Done)

    链接:https://codeforces.com/contest/670 A - Holidays - [水] AC代码: #include<bits/stdc++.h> using n ...