导航:首页 > 编程语言 > phpsphinx使用

phpsphinx使用

发布时间:2022-06-20 04:40:57

Ⅰ Thinkphp中使用sphinx,如何让sphinx的搜索功能一直保持

把searchd加入到启动项。具体如何加入启动项可以网络。

Ⅱ 如何调用Sphinx 和api接口

如何调用Sphinx

按上面配置,第5节点对数据库进行了索引,通过Sphinx自带的search(在bin/release目录)就可以在命令行进行搜索:

(搜索CGArt)
windows上:
search -c d:/sphinx/sphinx.conf CGArt
Linux上:
cd /usr/local/sphinx
./bin/search -c sphinx.conf CGArt
运行后,系统提示一堆信息:
....
....
words:
1. 'cgart': 36 documents, 189 hits
这个表示库中有36条记录符合要求,出现CGArt的有189处。应用程序如果想调用Sphinx,可以从两个方面:

一是通过Sphinx官方提供的API接口(接口有Python,java,Php三种版本)

二是通过安装SphinxSE(具体见1.2部分),然后创建一个中介sphinxSE类型的表,再通过执行特定的SQL语句实现。

通过官方API调用Sphinx(以PHP为例)

在sphinx安装目录有一个API目录,里面有三个PHP文件:test.php,test2.php和sphinxapi.php。 sphinxapi.php是sphinx调用接口封装文件,test.php是一个在命令行下执行的查询例子文件,test2.php是一个生成摘要的 例子文件。

在命令下行运行test.php(Linux上没有API目录,需要从源程序包中复制api目录至/usr/local/sphinx)

Windows上:
D:\sphinx\bin\release>c:\php5.2\php.exe -c c:\php5.2\php.ini ..\..\api\test.php -i cgfinal CGartLinux上(php在/usr/local/php目录,sphinx.conf在/usr/local/sphinx目录):

cd /usr/local/sphinx
/usr/local/php/bin/php api/test.php -i cgfinal CGArtSphinx的API查询接口主要有这些内容(其实对照 一下sphinxapi.php就清楚了):

//创建Sphinx的客户端接口对象
$cl = new SphinxClient ();

//设置连接Sphinx主机名与端口
$cl->SetServer('localhost',3312);

//可选,为每一个全文检索字段设置权重,主要根据你在sql_query中定义的字段的顺序,Sphinx系统以后会调整,可以按字段名称来设定权重
$cl->SetWeights ( array ( 100, 1 ) );

//设定搜索模式,SPH_MATCH_ALL,SPH_MATCH_ANY,SPH_MATCH_BOOLEAN,SPH_MATCH_EXTENDED,SPH_MATCH_PHRASE
$cl->SetMatchMode(SPH_MATCH_ALL);

//设定过滤条件$attribute是属性名,相当于字段名(用SPH_MATCH_EXTENDED时),$value是值,$exclude是布尔型,
当为true时,相当于$attribute!=$value,默认值是false
$cl->SetFilter($attribute, $values, $exclude);

//设定group by
//根据分组方法,匹配的记录集被分流到不同的组,每个组都记录着组的匹配记录数以及根据当前排序方法本组中的最佳匹配记录。
//最后的结果集包含各组的一个最佳匹配记录,和匹配数量以及分组函数值
//结果集分组可以采用任意一个排序语句,包括文档的属性以及sphinx的下面几个内部属性
//@id--匹配文档ID
//@weight, @rank, @relevance--匹配权重
//@group--group by 函数值
//@count--组内记录数量
//$groupsort的默认排序方法是@group desc,就是按分组函数值大小倒序排列
$cl->SetGroupBy($attribute, $func, $groupsort);

//设定order by的内容,第一个参数是排序方法名,值有
// SPH_SORT_RELEVANCE,SPH_SORT_ATTR_DESC,SPH_SORT_ATTR_ASC,SPH_SORT_TIME_SEGMENTS,SPH_SORT_EXTENDED
//$sortby的值如"HITS desc"
$cl->SetSortMode(SPH_SORT_EXTENDED, $sortby);

//set count-distinct attribute for group-by queries,$distinct为字符串
$cl->SetGroupDistinct ( $distinct );

//相当于mysql的limit $offset,$limit
$cl->SetLimits($start,$limit)

//$q是查询的关键字,$index是索引名称,当等于*时表查询所有索引

Ⅲ php中如何使用sphinx搜索引擎

一. 安装、配置

1.ubuntu安装sphinx

如果没有安装aptitude ,需要先安装 aptitude

2.配置

3.执行命令分词,会在/var/lib/sphinxsearch/data/test1 目录下生成一堆索引文件

sudo indexer -c /etc/sphinxsearch/sphinx.conf test1

test1为上述配置文件的index名字

4.命令行测试搜索

sudo search -c /etc/sphinxsearch/sphinx.conf google

二.在php中使用,安装php、sphinx的依赖库

  1. 安装 aptitudeapt-get install aptitude

sudo aptitude install libsphinxclient-dev libsphinxclient-0.0.1 -y

2.安装php sphinx的扩展

安装 pecl
sudo apt-get install php-pear php5-dev
在安装sphinx
sudo pecl install sphinx

3.在配置文件php.ini中添加sphinx的扩展,

我的php.ini文件为
sudo vim /etc/php5/fpm/php.ini
获取自己的php.ini文件位置使用
php5-fpm -i|grep ini

添加:
extension=sphinx.so


4.重启php5-fpm,查看php是否加载sphinx模块
sudo /etc/init.d/php5-fpm restart


5.将search程序运行在后台
sudo searchd -c /etc/sphinxsearch/sphinx.conf
默认监听配置文件中的端口:9312

6.在thinkphp中调用搜索

搜索完毕,返回结果(默认返回20条,修改返回条数用添加$s->SetLimits(0, 1000, 1000);),搜索速度相当快,索引80w条数据的title和description两个字段耗时不到10s,该搜索引擎支持增量索引,多种模式的搜索,网上的资料也非常多

Ⅳ 如何将Sphinx配置成缓存服务器

先来了解下Sphinx的使用的文件,Sphinx使用的文件包括 .sph, .spa, .spi, .spd, .spp, .spm ,.spl。
sph:头文件,保存的是系统的配置文件。
spi:保存WordId及指向此WordId对应的文档信息在spd文件的指针, spi文件在检索程序启动时完全加载入内存。 spi文件是分块的,块内排序,块之间也排序。分块的目的应该是为了快速检索到WordId, 因为spi中的WordId是变长压缩的,索引需要先在块级别做二分定位,再在快内解压缩查找。
spa:存储DocInfo的文件,检索程序启动时会把此文件加载如内存,sphinx可以指定DocInfo的存储方式:
inline:存储到spd文件中。
extern:单独存储,就会生成spa文件。
spd:文档列表。
spp:关键字所在位置列表。
spm:在DocInfo中,有一种特殊的属性,叫MVA,多值属性。 Sphinx对此属性特殊处理,需要存储在spm文件中。 检索程序启动时会把此文件加载如内存。 此属性在DocInfo对应位置存储其在此文件中的字节偏移量。
spk:killlist
spl:索引锁
通过介绍可以得知Sphinx存储的文档的属性,在0.98之前的版本是不存储的,我们是不是可以利用这些数据作为缓存使用呢,根据DocID获取文档的信息。
通过hack搜索服务添加SEARCHD_COMMAND_DOCINFO指令,客户端API添加GetDocinfo函数可以达到预期的效果。
php示例代码:
require 'sphinxapi.php';
$cl = new SphinxClient ();
$cl->SetServer();
$res = $cl->GetDocinfo(1, 'singer');
print_r($res);

Ⅳ 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编码;

Ⅵ sphinxapi.php的SetSortMode()怎么用啊

如果你是用sphinx查询出id数组,

再到mysql中

select*fromtable1whereidin(id1,id2,...)

这样查询出结果,

需要注意在mysql中加上order语法:

select*fromtable1whereidin(id1,id2,...)whereidin(id1,id2,...)
orderbyfield(id,id1,id2,...)

order by field(id, id1,id2, ...)

ps: 抱歉,我来晚了~

Ⅶ sphinx和solr哪个更适合php站点

## ES 缺点
基于java,会有一些java的常见问题需要注意,比如gc
单纯执行速度上比C写的sphinx慢

## sphinx 优点
纯粹,没有什么花哨的其他功能
C写的,速度快
新版本加了分布式索引、动态更新索引等功能

## 下面列举Es比sphinx优秀的部分
1、部署简单,虽然sphinx部署也挺简单,但是在书写配置的时候,你会发现,sphinx的配置是要写好后,重启sphinx,而Elasticsearch针对某个索引的配置,是可以动态写入的。
2、调试简单,sphinx有命令行工具可以调试,而Elasticsearch使用的是http接口进行调试,不需要专门的API类,几行php代码就可以写一个Elasticsearch的API。
3、可视化工具比较多,有收费的,也有免费的,比如kibana head marvel。
4、提供结构化的JSON查询语句,易读性强
5、Es可以保留源数据(可选),也就是说,你可以不需要mysql的支持,就可以完成整个搜索过程,即使你不需要这个功能,在调试的时候,还是让人感到非常便利,不用将查询结果到数据库匹配一下。
6、Es可以动态更新全文索引,动态更新单个记录,而不像sphinx一样需要重建全部
7、对UTF8的支持是不需要单独配置的,天生为各种自然语言设计,而不仅仅是欧系语言

## 从中文分词上来说
首先我觉得分词最重要的基本都是词库,分词算法两个工具基本都可以使用。
lucene 支持很多分词工具,比如
word https://github.com/ysc/word
比如ik https://github.com/medcl/elasticsearch-analysis-ik
这两个工具最近都很活跃,因为Es更新2.0 和 2.1

比较分词区别(sphinx可能有误):
sphinx分词 我不太熟悉它的机制,多数情况下我使用scws分词,发送给sphinx,然后设置匹配规则,比如最大匹配

Es的全文索引是基于分词的,也就是事先分好词,每个词对应某些记录,自动进行TF/IDF的运算,得到一个评分后返回,当然这个评分可以改(sphinx同样支持修改评分)

另一方面ES也支持类似sphinx的匹配方式,模糊匹配,一般会一起使用,一个词不在分词库中的时候,或者用户写错了,就用fuzzy,所以Es在功能上,应该和sphinx不会有太多差别,而且要更多。

## 后期维护上:
sphinx的配置文件在mysql分表之后,维护起来是比较麻烦的,你可以用php脚本当做配置文件,这样会好很多。
Es的索引是可以主动发给它去建立的(通过http接口),分表之后,它不关心数据库状态和结构。新增字段可以热更新。

## 扩展性上:
Es和sphinx都支持分布式索引,扩展性都没有问题
两者都支持别名,Es的别名加上动态建立索引,使得更换索引结构或者重建索引后,支持0宕机时间。而sphinx的rotate选项可以动态更新索引(不知道能不能动态创建索引,因为sphinx我在使用的时候,索引都要求写在配置文件里。
性能方面没有测试数据。从直观感受上sphinx要快一些。

## 文档方面
感觉两个工具都差不多,中文资料一般般,英文资料很全。

Ⅷ php windows下怎么安装sphinx,安装后又怎么使用

1、下载,我这里下的是“Win64 binaries w/MySQL+PgSQL+libstemmer+id64 support”,下载后文件名:sphinx-2.0.6-release-win64-id64-full.zip;
2、将其解压到D: \ sphinx,并在D:\sphinx下新建目录data(用来存放索引文件)与log(用来存放日志文件);
3、将D:\sphinx\sphinx.conf.in复制到D:\sphinx\bin\sphinx.conf.in,并重命名为sphinx.conf;
4、修改 D:\sphinx\bin\sphinx.conf 如下:
4.1、搜索source src1修改{...}中的内容
# 使用的数据库类型
type = mysql
# 服务器
sql_host = localhost
# 数据库登录名
sql_user = root
# 数据库登录密码
sql_pass = root
# 操作的数据库名称
sql_db = test
# 数据库服务器端口
sql_port = 3306
# 设置编码,如果用的是utf-8编码
sql_query_pre = SET NAMES utf-8
(以上7条前如有#将其删除)
4.2、搜索index test1修改{...}中的内容
# 放索引的目录
path = D:/sphinx/data/
# 编码
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
# 简单分词,只有0和1,需要搜索中文必须置1
ngram_len = 1
# 需要分词的字符,搜索中文时必须
ngram_chars = U+3000..U+2FA1F
(以上5条前如有#将其删除)
5、导入测试数据将D:\sphinx\example.sql中语句执行到test数据库中,注意:test数据库创建时需要指定为utf-8格式;
6、打开cmd窗口,进入目录D:\sphinx\bin;
7、建立索引,执行indexer.exe test1,test1即为sphinx.conf中index test1
Sphinx 2.0.6-id64-release (r3473)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphin

using config file './sphinx.conf'...
indexing index 'test1'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 222 bytes
total 0.019 sec, 11252 bytes/sec, 202.74 docs/sec
total 2 reads, 0.000 sec, 0.2 kb/call avg, 0.0 msec/call avg
total 9 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
成功...
8、搜索'test',执行search.exe test
Sphinx 2.0.6-id64-release (r3473)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file './sphinx.conf'...
index 'test1': query 'test ': returned 3 matches of 3 total in 0.000 sec

displaying matches:
1. document=1, weight=2421, group_id=1, date_added=Tue Feb 26 10:25:31 2013
id=1
group_id=1
group_id2=5
date_added=2013-02-26 10:25:31
title=test one
content=this is my test document number one. also checking search within
phrases.
2. document=2, weight=1442, group_id=3, date_added=Tue Feb 26 10:25:31 2013
id=2
group_id=3
group_id2=6
date_added=2013-02-26 10:25:31
title= ????
content=this is my test document number two ???????
3. document=4, weight=1442, group_id=2, date_added=Tue Feb 26 10:25:31 2013
id=4
group_id=2
group_id2=8
date_added=2013-02-26 10:25:31
title=doc number four
content=this is to test groups

words:
1. 'test': 3 documents, 4 hits

index 'test1stemmed': search error: failed to open D:/sphinx/data/test1stemmed.s
ph: No such file or directory.
最后面的一句error可忽略;
9、搜索中文,首先将数据库中的内容update含有中文,执行sql语句:
UPDATE documents SET title='中文', content='this is my test document number one. also checking search within phrases.含有中文。' WHERE id=1;
UPDATE documents SET title='中文标题', content='this is my test document number one. also checking search within phrases.含有中文内容。' WHERE id=2;
UPDATE documents SET title='中文标题测试', content='this is my test document number one. also checking search within phrases.含有中文内容。' WHERE id=3;
重新建立索引(执行第7步);
然后执行search.exe 中文
Sphinx 2.0.6-id64-release (r3473)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file './sphinx.conf'...
indexing index 'test1'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 349 bytes
total 0.025 sec, 13808 bytes/sec, 158.26 docs/sec
total 2 reads, 0.000 sec, 0.3 kb/call avg, 0.0 msec/call avg
total 9 writes, 0.000 sec, 0.2 kb/call avg, 0.0 msec/call avg

D:\sphinx\bin>search.exe 中文
Sphinx 2.0.6-id64-release (r3473)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file './sphinx.conf'...
index 'test1': query '中文 ': returned 0 matches of 0 total in 0.000 sec

words:

index 'test1stemmed': search error: failed to open D:/sphinx/data/test1stemmed.s
ph: No such file or directory.
没有搜索到,因为windows命令行中的中文时GBK编码格式,所以没有匹配内容。我们可以使用PHP程序来试试;
10、进入D:\sphinx\api\目录,可以发现sphinx支持php、java、ruby调用,并提供对应的test例子,这里我们使用php来操作,首先将api复制到D:\www\下并重命名为sphinxapi,因为我本机上apache的web目录为D:\www,在D:\www\sphinxapi\下新建search.php,内容为:
<?php
require 'sphinxapi.php';
$s = new SphinxClient();
$s->SetServer('localhost', 9312);
$result = $s->Query('中国');
print_r($result);
echo '<br /><br />';
$result = $s->Query('中文');
print_r($result);
?>
然后回到cmd命令行中,开启sphinx服务,执行searchd.exe(这个必须要执行的)
Sphinx 2.0.6-id64-release (r3473)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file './sphinx.conf'...
WARNING: compat_sphinxql_magics=1 is deprecated; please update your application
and config
WARNING: preopen_indexes=1 has no effect with seamless_rotate=0
listening on all interfaces, port=9312
listening on all interfaces, port=9306
precaching index 'test1'
precaching index 'test1stemmed'
WARNING: index 'test1stemmed': preload: failed to open D:/sphinx/data/test1stemm
ed.sph: No such file or directory; NOT SERVING
precaching index 'rt'
WARNING: index 'rt': preload: failed to open @CONFDIR@/data/rt.lock: No such fil
e or directory; NOT SERVING
precached 3 indexes in 0.018 sec
成功...
然后在浏览器中执行http://localhost/sphinxapi/search.php,打印出来的数组结果可以很清晰的看见搜索的结果比对。。。
11、至此sphinx在windows下的简单安装与使用就完成了。

Ⅸ php sphinx 搜索 多表联查速度怎么样

使用Elasticsearch和solr一样,使用lucene
这个和php无关,因为无论哪个工具,都是通过网络接口查询,所以我不回答有关是否适合php的情况~~

## ES 缺点
基于java,会有一些java的常见问题需要注意,比如gc
单纯执行速度上比C写的sphinx慢

## sphinx 优点
纯粹,没有什么花哨的其他功能
C写的,速度快
新版本加了分布式、动态更新索引等功能

## 下面列举Es比sphinx优秀的部分
1、部署简单,虽然sphinx部署也挺简单,但是在书写配置的时候,你会发现,sphinx的配置是要写好后,重启sphinx,而Elasticsearch针对某个索引的配置,是可以动态写入的。
2、调试简单,sphinx有命令行工具可以调试,而Elasticsearch使用的是http接口进行调试,不需要专门的API类,几行php代码就可以写一个Elasticsearch的API。
3、可视化工具比较多,有收费的,也有的,比如kibana head marvel。
4、提供结构化的JSON查询语句,易读性强
5、Es可以保留源数据(可选),也就是说,你可以不需要mysql的支持,就可以完成整个搜索过程,即使你不需要这个功能,在调试的时候,还是让人感到非常便利,不用将查询结果到数据库匹配一下。
6、Es可以动态更新全文索引,动态更新单个记录,而不像sphinx一样需要重建全部
7、对UTF8的支持是不需要单独配置的

## 从中文分词上来说
首先我觉得分词最重要的基本都是词库,分词算法两个工具基本都可以使用。
lucene 支持很多分词工具,比如
word
比如ik
这两个工具最近都很活跃,因为Es更新2.0 和 2.1

比较分词区别(sphinx可能有误):
sphinx分词 我不太熟悉它的机制,多数情况下我使用scws分词,发送给sphinx,然后设置匹配规则,比如最大匹配(我基本都是基于模糊匹配在用sphinx)

Es的全文索引是基于分词的,也就是事先分好词,每个词对应某些记录,自动进行TF/IDF的运算,得到一个评分后返回,当然这个评分可以改(sphinx同样支持修改评分),这种检索方式肯定更快,但是受到分词限制,所以我每个字也分词,然而这样可能影响分数判断。

另一方面ES也支持类似sphinx的匹配方式,叫做fuzzy,模糊匹配,一般会一起使用,一个词不在分词库中的时候,就用fuzzy,所以Es在功能上,应该和sphinx不会有太多差别,而且应该要更多。

## 个人方面
我在使用shpinx的时候,会查3次,一次完全按照用户输入的查(如果用户没有输入空格),一次按照空格分开查或者分词系统分词结果查,一次按照单个字来查(前提是前面两个结果太少)。

在用Es的时候,如果没有办法正确分词,会按照fuzzy + 单字查(可以同时进行),如果有办法分词,按照分词结果 + 单字查(可以同时)

## 后期维护上:
sphinx的配置文件在mysql分表之后,维护起来是比较麻烦的,你可以用php脚本当做配置文件,这样会好很多。
Es的索引是可以主动发给它去建立的(通过http接口),分表之后,它不关心数据库状态和结构。新增字段可以热更新。

## 扩展性上:
Es和sphinx都支持分布式索引,扩展性都没有问题
两者都支持别名,Es的别名加上动态建立索引,使得更换索引结构或者重建索引后,支持0宕机时间。而sphinx的rotate选项可以动态更新索引(不知道能不能动态创建索引,因为sphinx我在使用的时候,索引都要求写在配置文件里。
性能方面没有测试数据。从直观感受上sphinx要快一些。

Ⅹ windows php_sphinx 扩展如何安装

我没配置过这个扩展,但扩展的安装一般是通用的:

首先,扩展文件(*.dll) 必须有匹配的PHP版本,你的PHP5.4 必须下载一个支持5.4的扩展。
然后,打开php.ini 加入一行 extension = *.dll ,然后重启(iis 或 apache)
.pdb 可能是 sphinx 的分词数据库? 和 dll 放相同的文件夹试试。

阅读全文

与phpsphinx使用相关的资料

热点内容
程序员的兴趣 浏览:409
华为服务器有什么好 浏览:699
程序员和测试之间的关系 浏览:945
加密蚊帐什么意思 浏览:151
javalistclear 浏览:607
哪个app上民宿多靠谱 浏览:827
重庆服务器租用哪里有云服务器 浏览:453
土星模拟器文件夹 浏览:902
文件夹文件袋文件盒 浏览:695
云服务器打开f8指令 浏览:243
盈透证券加密币 浏览:72
阿里云服务器初始密码怎么修改 浏览:266
服务器怎么设定公用网络 浏览:99
程序员自己尝尿检测出糖尿病 浏览:593
打印添加pdf 浏览:932
苹果解压专家账号 浏览:844
度晓晓app为什么关闲 浏览:228
net文件是伪编译码吗 浏览:149
伴随矩阵的matlab编程 浏览:63
单片机和h桥是什么意思 浏览:314