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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容