sphinx的安装与使用

                  sphinx安装使用之(wamp&lamp)

Sphinx(Sphinx(斯芬克司))

Sphinx是一个基于SQL的全文检索引擎,可以结合 MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL也设计了一个存储引擎插件。

Sphinx 单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

Sphinx的主要特性包括:

高 速索引 (在新款CPU上,近10 MB/秒); 高速搜索 (2-4G的文本量中平均查询速度不到0.1秒); 高可用性 (单CPU上最大可支持100 GB的文本,100M文档); 提供良好的相关性排名支持分布式搜索; 提供文档摘要生成; 提供从MySQL内部的插件式存储引擎上搜索 支持布尔,短语, 和近义词查询;支持每个文档多个全文检索域(默认最大32个); 支持每个文档多属性;支持断词; 支持单字节编码与UTF-8编码;

 

Coreseek

coreseek是一款基于sphinx开源的搜索引擎,专门为用户提供免费的中文全文检索系统,coreseek被称为带有中文分词的sphinx,与 sphinx不同的是coreseek增加了一个带有中文分词的词库,这里使用了coreseek 3.2.14版本进行解讲,本篇讲解如何安装coreseek,并同时解决如何给php加上sphinx模块。首先先在wamp环境上安装及操作其次在lamp环境上安装coreseek及使用这里咱们使用的数据库是MySQL;

 

coreseek(wamp安装过程)

由于coreseek官网已经消失拉,coreseek包我使用其他方式下载下来的或者使用者用此文档是请连带coreseek-3.2.14-win32.zip这个包同时共享;

                                               ∧

或者以互联网形式找到此压缩包

安装开始;

首先将coreseek-3.2.14-win32.zip打开解压如图:

我是直接解压到F盘里面的:

由于开源产品coreseek 在windows上无需安装只需要放在某个目录下即可

咱们打开解压过得文件你可以看到如图所示的一些文件夹  (如图):

首先进入etc目录打开csft_mysql.conf文件

以上红色标识是需要改动的其余的配置看自己需要什么改什么

修改此文件里面的配置;规则咱们就创建好啦。

接下来打开cmd命令行进入该目录如图:

输入如下命令开始生成索引文件

.\bin\indexer.exe–c .\etc\csft_mysql.conf --all

输入完毕之后出现如下图所示你的索引就创建好啦!(如图):

接下来吧coreseek的搜索服务打开

输入以下命令

.\bin\searchd.exe-c .\etc\csft_mysql.conf

输入完毕如下图所示如果没出任何问题你的coreseek搜索服务就开启拉

如图:

接下来开始让php操作coreseek

打开coreseek文件目录的api目录找到 sphinxapi.php文件复制到你的域名文件下

我的环境是PHPStudy所有我放在WWW目录下我创建了一个sphinx文件夹里面放入如图所示的两个PHP文件

Ses.php里面的内容如图:

 

<?php
header("content-type:text/html;charset=utf8");
include'./sphinxapi.php'; //包含sphinxapi
$sphinx=newSphinxClient(); //实例化
$sphinx->SetServer('120.25.168.165',9312);//链接
$res=$sphinx->Query("北京","*");//查询的字段第二参数是你配置文件里面写得规则这里是*就会匹配所有规则
print_r($res);//打印数据
?>

如图所示将以上代码放到该目录下操作一下如果在浏览器输出一些数据你的coreseek就安装好啦!php也可以使用嘞;

 

 

 

Lamp环境下安装及使用coreseek

首先在你的linux上先下载一个coreseek的一个linux的安装包

 

由于官网的下载地址已经不存在所以这里我已经以其他渠道下载完成

 

打开linux首先安装如下依赖包;(如果有的话只需要更新)

 

yum -y install m4 autoconf automake libtool

 

yum -y install gcc gcc-c++ wget

 

yum -y install mysql-devel

 

##mmseg3是一个中文分词插件

 

如果没有下载的话可以将根本文档带的安装包上传到linux

 

如果安装包已经放好

 

执行如下命令:

 

tar zxvf coreseek-3.2.14.tar.gz                 解压命令

 

cd coreseek-3.2.14                          进入目录

 

cd mmseg-3.2.14/                           进入中文分词插件

 

./bootstrap                                

 

./configure --prefix=/usr/local/mmseg3          检测配置

 

make && make install                      编译 && 编译安装

 

 

cd ../csft-3.2.14/                             进入配置目录

 

sh buildconf.sh                               执行脚本

 

 

./configure --prefix=/usr/local/coreseek--without-python --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/--with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql --host=arm                      

                                                    检测配置

 

安装过程需要修改一个配置文件

 

vi src/sphinxexpr.cpp

 

然后将所有的Tval = ExprEval ( this->m_pArg, tMatch ).....修改为

 

             T val = this->ExprEval (this->m_pArg, tMatch )

(建议大家将此文件拿到本地进行修改)

vi 编辑器修改命令:%s/Tval = ExprEval ( this->m_pArg, tMatch )/T val = this->ExprEval (this->m_pArg, tMatch )/g

 

make

make install

 

cd /usr/local/coreseek/etc                         进入coreseek安装完成的路径

 

输入ls会看到3个文件

example.sql sphinx.conf.dist sphinx-min.conf.dist

 

其中example.sql是示例sql脚本我们将其导入到数据库中的test数据库中作为测试数据(会创建两张表 documentstags)

 mysql -uroot -p<example.sql

vi sphinx.conf

 

输入以下内容:

source src1

{

         type                                      = mysql

         sql_host                               = 192.168.214.128

         sql_user                               = root

         sql_pass                              = root

         sql_db                                            =test

         sql_port                               = 3306      # optional, default is 3306

         sql_sock                              = /tmp/mysql.sock

         sql_query_pre= SET NAMES utf8

         sql_query                                      = SELECT id,group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents

         sql_attr_uint                      = group_id

         sql_attr_timestamp                  = date_added

         sql_query_info                            = SELECT * FROM documents WHERE id=$id

}

index test1

{

         source                                           =src1

         path                                      = /usr/local/coreseek/var/data/test1

         docinfo                                          =extern

         charset_type                      = zh_cn.utf-8

         mlock                          = 0

         morphology               = none

         min_word_len          = 1

         html_strip                  = 0

         charset_dictpath              = /usr/local/mmseg3/etc/

         ngram_len                    = 0

}

indexer

{

         mem_limit                                    = 32M

}

 

 

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/coreseek/var/log/searchd.pid

         max_matches                             = 1000

         seamless_rotate                        = 1

         preopen_indexes                        = 0

         unlink_old                                     = 1

}

 

 

说明:

代码段sourcesrc1{***} 代表数据源里面主要包含了数据库的配置信息,src1表示数据源名字,可以随便写。

代码段indextest1{***} 代表为哪个数据源创建索引,source ***是成对出现的,其中的source参数的值必须是某一个数据源的名字。

其他参数可以查看手册,这里不再赘述。

 

 

生成索引:

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

 

其中参数--all表示生成所有索引

当然也可以是索引的名字例如:

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

 

执行后可以在/usr/local/coreseek/var/data目录中看到多出一些文件,是以索引名为文件名的不同的扩展名的文件

在不启动sphinx的情况下即可测试命令:

 

 

 /usr/local/coreseek/bin/search -c /usr/local/coreseek/etc/sphinx.confnumber

                                                                                                                                                                                                                      (这是开启sphinx的命令行搜索就是说number是你要查询的数据名称)

 

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

 

                                     (searchd是开启sphinx的搜索服务功能)

 

如果sphinx在运行中,要indexer时,需要加上--rotate参数,这样索引完就直接生效了。

原因是sphinx的searchd在启动时会创建一个 .spl 锁文件,并在关闭时会删除它。在indexer创建索引时如果发现有 .spl文件,则不会创建新索引,因为这时已经标志sphinx正在运行中,除非使用--rotate。

 

 

Php操作linux上的sphinx

 

在站点域名目录下创建一个文件列如test.php

test.php文件中写入如下内容;

(注意与test同级需要将本身的sphinxapi类加载进来)

<?php

header("content-type:text/html;charset=utf8");

include'./sphinxapi.php';

$sphinx= new SphinxClient();

$sphinx->SetServer('linux上的ip地址',9312);

$res=$sphinx->Query("搜索字段","*"); //这里的*代表匹配所有定义好的规则

print_r($res);

?>

你可能感兴趣的:(sphinx的安装与使用)