sphinx隨筆記了一下

sphinx筆記php

一:下載中文版coreseek包
1:解壓後,將etc下的mysql。conf文件複製一份放到上級目錄下,更名爲sphinx。conf
2:配置文件:
2.1:source配置數據源
source goodsmysql

你要爲那些數據建索引,好比,爲php39數據庫中的p39—goods表爲數據源
sql_db = php39linux

sql_query 主查詢,爲那些數據建索引,就用一條語句他她們取出來 例如:select id, name,title from table 爲這三個字段減索引
知識點:group_concat() mysql函數sql

測試語句:SELECT group_concat(town) FROM `players` group by town
結果去查找town中去查找哪些值是同樣的,若是相等,就所有列出來,以逗號分割進行列出,以下:數據庫


二:2.2:index 索引文件api


一個數據源對應一個index
定義索引文件服務器

index goods
{
source = goods
生成的索引文件存放的目錄注意,最後的goods是文件名叫goods 不是goods目錄下
path = c:\****\goods函數

}
2.3:數據庫配置工具


三:建立索引:post


配置完成後,打開cmd 進入bin降低indexer。exe拉近cmd裏來

*****。exe -c ****\sphinx.conf(這裏是配置的那個路徑) goods -》 指的是哪個數據源
回車就行,到此這個索引就建完了


四:安裝並啓動sphinx服務器
打開cmd 使用bin文件夾下的serchd。exe命令 拖入cmd中去

*** -c 配置的路徑***\sphinx.conf --install


伍:安裝服務窗口中找到sphinx並啓動

安裝玩的那個窗口中輸入services.msc便可

在本地服務窗口中可找到searchd這個服務,說明啓動成功


陸:項目中使用這個sphinx查詢

A:將sphinx.api.php複製進項目中---放到根目錄下就行
B:在控制器中使用php操做他

function keyserch(){

$key = I($key);

require('./sphinxapi.php');引入這個類文件,他是用來操做sphinx的類文件,調用它裏面的方法用就行,不會的百度sphinxapi裏的方法,手冊有介紹

$sph = new \sphinxclient();
$sph = setserver('localhost',9312);鏈接服務器9312 是sphx的固定端口
$sph = query($key,goods);第一個參數是查詢那個關鍵字,第二個參數是從那個索引文件裏查詢搜索,{ 指的是索引的名字 },這裏是只index goods這裏定義的這個

 


 柒:在牛逼一點的功能:

實時索引更新:我的理解 主索引+臨時索引(增量索引) 來實現相似於實時更新的效果,原理是,爲新數據生成個小的臨時的索引文件,而後將索引文件合併到主索引文件中去

a:先給他建一個主索引,從這些索引文件中,查詢出一個最大的商品id來 新建一個數據表,將這個最大的商品的id update存到這個表中

b:而後每次新添加的商品,由於不會自動創建索引,因此他們的id不會再索引文件中,他們的商品的id確定比索引中的保存的最大的商品id要大

c: 而後給新添加的商品新建一個索引,按照上述方法,source goods數據源複製一份,改成 source goods_new 做爲新索引數據源
index goods索引文件複製一份,改成index goods_new 做爲新索引的名字

捌:而後合併主索引


修改sphx配置文件:新建一個數據表叫spinx_xin 字段爲id

source goods
{
type=**
****
sql_query = select *****from p39_goods 創建的索引文件,此時爲主索引

# 在建立好索引後吧最後一個商品的id更新到新建的表中:
$sql_query_post = update spinx_xin set id= (select max(id) from p39_goods )

}

測試一下:從新建立一下索引便可看到效果 注意:重建索引需在本地服務中心關閉search的這個sphinx服務 而後執行services.msc在啓動 而後輸入創建索引命令便可

新建索引不關閉服務器也行,在建索引命令後面加上 --rotate這個命令便可
執行完命令後就把id更新到表中了

注意:這裏只是把索引的文件的商品id更新到了新表中,新的商品尚未索引
玖:接下來就是給新商品新建索引,而後把它每過一段時間,合併到主索引中
複製source goods 爲goods_new

修改索引的sql語句

source goods_new
{

******
****
*****
新商品id確定大於索引中最大的商品的id,
由於已將最大的id存在spinx_xin 新表的id中
只要比較商品表中比這個新表的id大的就是新商品

修改sql語句,目的是查詢出新商品,而後給新商品建索引
sql_query = select id ****from p39_goods where id>(select id from spinx_xin )
******
}
同理新建了一個數據源就得新建一個index索引文件

複製一份index goods 索引文件在作相應的修改,新的索引就行了

 

 

拾:
寫一個腳本,bat文件,目的有兩個,
先給增量數據生成索引文件
把新生成的索引文件合併到主索引中


bat中寫入創建索引的語句:

1:創建新的索引文件
****index.exe -c ***\sphinx.conf(路徑) goods_new
2:合併索引新索引文件到主索引文件中
****indexer.exe -c ***\sphinx.conf --merge goods goods_new --rotate (這裏別忘了寫rotate至關於,自動關閉sghinx服務器建索引自動打開,上文有提到)


而後執行腳本文件

可是每次添加商品手動執行這個腳本更新索引,太麻煩了,因此還要配置一下這個腳本,讓他自動每五分鐘執行一次

window:管理工具--任務計劃 設置五分鐘自動執行腳本linux:crond進程

相關文章
相關標籤/搜索