全文搜索引擎-sphinx及xunsearch

使用全文搜索引擎

站内搜索类型

1、sphinx(斯芬克斯) sphinx不支持中文, coreseek(基于sphinx,并且支持中文)

2、lucene java支持好,为php也提供方法

3、xunsearch(迅搜) 国产、仅支持php

sphinx的使用

优点:
  高速的建立索引可达到10M/s
  高性能的搜索(在2-4G的文本数据上,平均每次检索响应的时间小于0.1秒)
  可处理海量数据(目前已知可以处理100G的文本数据,在单一的CPU的系统上可处理100M的文档)
  提供的优秀的相关度算法,基于短语相似度和统计BM2的复合Ranking的方法
  支持分布式搜索
  提供文档片段生成功能
  可作为Mysql的存储引擎提供搜索服务
  支持布尔,短语,词语相似度等多种检索模式
缺点:
 必须要有主键
 主键必须为整数
 不负责数据存储
 配置不灵活

不多说,直接上案例:

1.下载好sphinx工具,解压目录如下:


image

2.将sphinx-min.conf.in文件改名为sphinx.conf并移动到bin文件夹中

编辑该文件配置如下:

source src1
{
    type            = mysql

    sql_host        = localhost #主机地址
    sql_user        = root#帐号
    sql_pass        =     #密码
    sql_db          = oneshop  #数据库
    sql_port        = 3306  # 数据库端口 3306
    sql_query       = SELECT id, name, tel FROM one_user #查询语句
    sql_attr_uint       = group_id
    sql_attr_timestamp  = date_added
    sql_query_pre = set names utf8   #数据库编码
}


index test1
{
    source          = src1
    path            = D:/xampp/htdocs/sphinx/data #这个一定要配置
    charset_type = utf-8 #指定编码
    ngram_len = 1        #要找中文需指定为1.
    ngram_chars = U+3000..U+2FA1F
    
}

indexer
{
    mem_limit       = 128M
}

searchd
{
    listen          = 9312
    listen          = 9306:mysql41
    log         = D:\xampp\htdocs\sphinx\log\searchd.log  #进程日志
    query_log       = D:\xampp\htdocs\sphinx\log\query.log    #查询日志

    read_timeout        = 5
    max_children        = 30
    pid_file        = D:\xampp\htdocs\sphinx\log\searchd.pid 
    seamless_rotate     = 1
    preopen_indexes     = 1
    unlink_old      = 1
    workers         = threads # for RT to work
    binlog_path     =D:\xampp\htdocs\sphinx\data
}

3.生成查询索引 (coreseek 默认为index.php同目录下的csft.conf)
语法:index [-c 配置文件 --all或者索引源名称


image

4.安装searchd服务:(注意要以管理员的形式打开cmd 否则code5)

image

5.加载配置文件


image

6.启动


image

7.开始运行代码,我将该test2.php放在\share\doc下,如下:

<?php 

require ( "./api/sphinxapi.php" );
$sphinx = new SphinxClient();
$sphinx->SetServer('localhost',9312);
$result = $s->Query('huang123');
echo '<pre>';
print_r($result);

?>
image

image

8.返回的是主键id ,仍需根据id去查询数据

由于数据量太少了,这里就不比较速度了

代码部分:

从php手册中可以查到SphinxClient的用法:

1.实例化

$sphinx = new SphinxClient();

2.连接Sphinx服务器(searchd服务)

$sphinx -> setServer(‘localhost’,9312);

3.Query方法搜索关键词,结果是数组,其中matches存储的是检索到的记录

 $result = $s->query('huang123',*);
image
//通过array_keys()函数,可以提取这些id
$ids=array_keys($result['matches']);

//查询
if($ids){
    $ids=implode(',',$ids);
    ...
}       

4.Sphinx匹配模式

SPH_MATCH_ALL :匹配所有查询词(默认),完全匹配所有的词

SPH_MATCH_ANY:匹配查询词中的任意一个。匹配任意一个词

SPH_MATCH_PHRASE:将整个查询词看做一个词组,要完全匹配 相当于like

SPH_MATCH_BOOLEAN : 将查询看作一个布尔表达式 | & or  ! 例(“妈妈|爸爸”)

SPH_MATCH_EXTENDED2 : 查询看做一个sphinx的表达式
如:@name hjy @tel 1379532142  @ 字段 查询

延伸阅读:

Coreseek/Sphinx增量索引使用详解 http://xiaobu.duapp.com/index.php/2016/07/31/30/

xunsearch

bin/xs-ctl.sh restart 最好将此命令写入 /etc/rc.local 重启自启动

需要一个定时脚本,将需要检索的MySQL数据导入、更新到xunSearch里:
usr/local/php/bin/php /usr/local/xunsearch/sdk/php/util/Indexer.php --rebuild --source=mysql://你的数据库用户名:你的数据库密码@你的数
据库IP/你的数据库名 --sql="你要执行的SQL语句" --filter=debug --project=你的项目名;

保存数据文件的目录:prefix/data/project ;
prefix表示安装xunSearch的目录,project表示不同的项目数据目录

配置文件数据类型

image

代码部分:

ini_set('display_errors' , 'On');  

require '/usr/local/xunsearch/sdk/php/lib/XS.php';   //  引入 xunsearch sdk  
$xs = new XS('/usr/local/xunsearch/sdk/php/app/demo.ini');    // demo  为项目名称,配置文件是:$sdk/app/demo.ini  
  
$search = $xs->search;  
  
$query = 'hjy'; // 这里的搜索语句很简单,就一个短语  
  
$search->setFuzzy(); //设置模糊搜索  
$search->setQuery($query); // 设置搜索语句  
  
$search->setLimit( 100 );  
$docs = $search->search(); // 执行搜索,将搜索结果文档保存在 $docs 数组中  
var_dump($docs);  
$count = $search->count(); // 获取搜索结果的匹配总数估算值  
echo '<hr/>';  
var_dump($count);
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容