sphinx随笔记了一下
sphinx筆記
一:下載中文版coreseek包
1:解壓后,將etc下的mysql。conf文件復制一份放到上級目錄下,改名為sphinx。conf
2:配置文件:
2.1:source配置數(shù)據(jù)源
source goods
你要為那些數(shù)據(jù)建索引,比如,為php39數(shù)據(jù)庫中的p39—goods表為數(shù)據(jù)源
sql_db = php39
sql_query 主查詢,為那些數(shù)據(jù)建索引,就用一條語句他她們?nèi)〕鰜?例如:select id, name,title from table 為這三個字段減索引
知識點:group_concat() mysql函數(shù)
測試語句:SELECT group_concat(town) FROM `players` group by town
結果去查找town中去查找哪些值是一樣的,如果相等,就全部列出來,以逗號分割進行列出,如下:
二:2.2:index 索引文件
一個數(shù)據(jù)源對應一個index
定義索引文件
index goods
{
source = goods
生成的索引文件存放的目錄注意,最后的goods是文件名叫goods 不是goods目錄下
path = c:\****\goods
}
2.3:數(shù)據(jù)庫配置
三:創(chuàng)建索引:
配置完成后,打開cmd 進入bin下降indexer。exe拉近cmd里來
*****。exe -c ****\sphinx.conf(這里是配置的那個路徑) goods -》 指的是哪一個數(shù)據(jù)源
回車就行,到此這個索引就建完了
四:安裝并啟動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的類文件,調(diào)用它里面的方法用就行,不會的百度sphinxapi里的方法,手冊有介紹
$sph = new \sphinxclient();
$sph = setserver('localhost',9312);連接服務器9312 是sphx的固定端口
$sph = query($key,goods);第一個參數(shù)是查詢那個關鍵字,第二個參數(shù)是從那個索引文件里查詢搜索,{ 指的是索引的名字 },這里是只index goods這里定義的這個
?
?柒:在牛逼一點的功能:
實時索引更新:個人理解 主索引+臨時索引(增量索引) 來實現(xiàn)類似于實時更新的效果,原理是,為新數(shù)據(jù)生成個小的臨時的索引文件,然后將索引文件合并到主索引文件中去
a:先給他建一個主索引,從這些索引文件中,查詢出一個最大的商品id來 新建一個數(shù)據(jù)表,將這個最大的商品的id update存到這個表中
b:然后每次新添加的商品,因為不會自動建立索引,所以他們的id不會再索引文件中,他們的商品的id肯定比索引中的保存的最大的商品id要大
c: 然后給新添加的商品新建一個索引,按照上述方法,source goods數(shù)據(jù)源復制一份,改為 source goods_new 作為新索引數(shù)據(jù)源
index goods索引文件復制一份,改為index goods_new 作為新索引的名字
捌:然后合并主索引
修改sphx配置文件:新建一個數(shù)據(jù)表叫spinx_xin 字段為id
source goods
{
type=**
****
sql_query = select *****from p39_goods 建立的索引文件,此時為主索引
# 在創(chuàng)建好索引后吧最后一個商品的id更新到新建的表中:
$sql_query_post = update spinx_xin set id= (select max(id) from p39_goods )
}
測試一下:重新創(chuàng)建一下索引即可看到效果 注意:重建索引需在本地服務中心關閉search的這個sphinx服務 然后執(zhí)行services.msc在啟動 然后輸入建立索引命令即可
新建索引不關閉服務器也行,在建索引命令后面加上 --rotate這個命令即可
執(zhí)行完命令后就把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 )
******
}
同理新建了一個數(shù)據(jù)源就得新建一個index索引文件
復制一份index goods 索引文件在做相應的修改,新的索引就好了
?
?
拾:
寫一個腳本,bat文件,目的有兩個,
先給增量數(shù)據(jù)生成索引文件
把新生成的索引文件合并到主索引中
bat中寫入建立索引的語句:
1:建立新的索引文件
****index.exe -c ***\sphinx.conf(路徑) goods_new
2:合并索引新索引文件到主索引文件中
****indexer.exe -c ***\sphinx.conf --merge goods goods_new --rotate (這里別忘了寫rotate相當于,自動關閉sghinx服務器建索引自動打開,上文有提到)
然后執(zhí)行腳本文件
但是每次添加商品手動執(zhí)行這個腳本更新索引,太麻煩了,所以還要配置一下這個腳本,讓他自動每五分鐘執(zhí)行一次
window:管理工具--任務計劃 設置五分鐘自動執(zhí)行腳本
linux:crond進程
轉載于:https://www.cnblogs.com/yszr/p/7083632.html
總結
以上是生活随笔為你收集整理的sphinx随笔记了一下的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: React系列---Webpack环境搭
- 下一篇: 制作EOT字库