sphinx的使用

配置Sphinx(重要)
步骤1:创建youhua3数据库


image.png

步骤2:将etc/csft_mysql.conf复制并更名为sphinx.conf
步骤3:复制下面代码替换shpinx.conf中的内容(红色-可能需要修改,绿色-存在对应关系)

#数据源:数据来源定义(数据库信息、数据源SQL语句)
source music
{
    #下面是sql数据库特有的端口,用户名,密码,数据库名等。
    type                    = mysql

    sql_host                = localhost
    sql_user                = root
    sql_pass                = root
    sql_db                  = youhua3
    sql_port                = 3306
    sql_query_pre           = SET NAMES utf8

    #sql_query属性:取出要创建索引的数据
    #要求1:SELECT的第一个字段必须是主键、
    #要求2:第一个字段的名字(别名)必须是id
    #要求3:其他的字段就是要创建索引的字段
    #需  求:为歌曲表中的title和author和content字段创建索引
    sql_query               = SELECT id, title, author, content FROM music
}

#索引的定义(索引文件存放的位置,索引文件的名字)
#每个index对应一个数据源,用来定义这个数据源生成的索引文件的信息
index music
{
    #该索引对应哪个数据源
    source            = music
    #索引文件存放的目录和名字(存到E:/sphinx/var/data/目录下,索引文件的名字是music)
    path              = F:/www/sphinx/var/data/music  
    docinfo           = extern
    mlock             = 0
    morphology        = none
    min_word_len      = 1
    html_strip        = 0
    
    #词库文件所在的目录
    charset_dictpath = F:/www/sphinx/etc/

#字符集编码类型,可以为:(sbcs,utf-8,zh_cn.utf-8,zh_ch.gbk,zh_ch.big5)
    charset_type        = zh_cn.utf-8
}

#全局index定义
indexer
{
    #建立索引的时候,索引内存限制
    mem_limit            = 128M
}

#searchd服务定义
searchd
{
    listen              =   9312
    read_timeout        = 5
    max_children        = 30
    max_matches         = 1000
    seamless_rotate     = 0
    preopen_indexes     = 0
    unlink_old          = 1
    
    # 进程id文件
    pid_file = F:/www/sphinx/var/log/searchd_mysql.pid  
    # 系统日志存放的位置
    log = F:/www/sphinx/var/log/searchd_mysql.log        
    # 查询日志存放的位置
    query_log = F:/www/sphinx/var/log/query_mysql.log
}


index  music     创建music索引(和source一一对应,表示该索引通过哪些数据创建)
source  music1   创建music数据源

创建索引
创建指定索引语法:indexer.exe -c 配置文件 索引名
创建全部索引语法:indexer.exe -c 配置文件 --all

image.png

使用PHP API操作 Sphinx
创建Sphinx服务
创建服务:bin\searchd.exe -c 配置文件 --install
删除服务:sc delete 服务名
启动服务:net start 服务名
关闭服务:net stop 服务名


image.png

2、初体验(PHP操作Sphinx)

复制sphinx\api目录中的接口文件sphinxapi.php放到站点目录

在站点目录创建test.php引入该文件

<?php

#步骤1:引入sphinx接口文件
require './sphinxapi.php';

#步骤2:实例化对象
$sp = new SphinxClient;

#步骤3:设置服务
$sp->SetServer('localhost', 9312);

#步骤4:

#步骤5:设置查询条数
$sp->SetLimits(0, 5000);

#步骤6:发送查询
$rs = $sp->query('冬天', 'music');

echo '<pre>';
print_r($rs);

匹配模式
语法:$sp->SetMatchMode(常量)

SPH_MATCH_ALL            匹配所有词(默认)
SPH_MATCH_ANY            匹配一个词
SPH_MATCH_PHRASE     匹配整一个词
SPH_MATCH_BOOLEAN   将查询看作一个布尔表达式
SPH_MATCH_EXTENDED  查询看做一个sphinx的表达式

将查询看作一个布尔表达式(SPH_MATCH_BOOLEAN)

说明:就是通过运算查询
举例:
$sp->query('冬天 !寒冷', 'music')
匹配冬天关键字,但是不能有寒冷

$sp->query('冬天 & 寒冷', 'music')
匹配冬天 并且有 寒冷(都要有)

$sp->query('冬天 | 寒冷', 'music')
匹配冬天或寒冷(只要有一个)

查询看做一个sphinx的表达式(SPH_MATCH_EXTENDED)
说明:查询指定字段的内容
举例:@title 内容 @content 内容 @author 内容
练习:内容(content)字段=PHP

image.png

//例子

<?php
/*
步骤1:通过sphinx去MySQL中获取并建立索引文件
步骤2:通过php去sphinx中查询数据并返回ID
步骤3:根据ID去MySQL中查询具体数据

SPH_MATCH_ALL            匹配所有词(默认)
SPH_MATCH_ANY            匹配一个词
SPH_MATCH_PHRASE     匹配整一个词
SPH_MATCH_BOOLEAN   将查询看作一个布尔表达式
SPH_MATCH_EXTENDED  查询看做一个sphinx的表达式
 */
require './api/sphinxapi.php';

$sp=new SphinxClient;

$sp->SetServer("localhost",9312);

$sp->SetMatchMode(SPH_MATCH_ALL);
//设置查询的条数
$sp->SetLimits(0,10);
//发送查询
$rs = $sp->query('我喜欢php', 'music');

$ids=array_keys($rs['matches']);

$id=implode(',',$ids);

$pdo=new PDO("mysql:dbname=youhua3",'root','root');
$rt=$pdo->query("select * from music where id in ({$id})");
$res=$rt->fetchAll(PDO::FETCH_ASSOC);
foreach($res as $k){
    echo $k['id'].'<br>';
    echo gl("我",gl("喜欢",gl('php',$k['title']))).'<br>';
    echo gl("我",gl("喜欢",gl('php',$k['author']))).'<br>';
    echo gl("我",gl("喜欢",gl('php',$k['content']))).'<br>';
}


/*代码高亮*/
function gl($keywords,$content){
    return str_replace($keywords,"<font color='red'>{$keywords}</font>",$content);
}
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容