版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
傳智播客教育sphinx講師::為什么要用sphinx?當(dāng)對(duì)大文本數(shù)據(jù)進(jìn)行單詞匹配查詢時(shí),一個(gè)歌曲,數(shù)據(jù)庫(kù)中收集著上百萬(wàn)首歌曲的信息,如果要查詢出歌詞中帶“冬天”的所有歌曲,典型的做法是執(zhí)行如下SQL語(yǔ)句:SELECT
*
FROM
songs
WHERE
content
LIKE"%php%"。但是在MYSQL中以%開(kāi)頭的查詢無(wú)法使用索引,所以這條SQL語(yǔ)句將執(zhí)行全表掃描,性能極差。MyISAM引擎中的全文索引是專門對(duì)文本創(chuàng)建索引的,但對(duì)中文的支持不好。好的解決方案:使用sphinx
!Sphinx
?Sphinx是一個(gè)獨(dú)立的全文索引引擎,意圖為其他應(yīng)用提供高速、低空間占用、搜索結(jié)果高相關(guān)度的全文搜索功能。Sphinx可以非常容易的與SQL數(shù)據(jù)庫(kù)和
語(yǔ)言集成。內(nèi)置MySQL和PostgreSQL數(shù)據(jù)庫(kù)數(shù)據(jù)源的支持。搜索API支持PHP、Python、Perl、Rudy和Java。sphinx
的特性高速的建立索引(可達(dá)10M/秒)高性能的搜索(平均檢索時(shí)間小于0.1秒)可處理海量數(shù)據(jù)提供了優(yōu)秀的相關(guān)度算法支持分布式搜索提供
生成功能可作為MYSQL
引擎提供搜索服務(wù)支持布爾、短語(yǔ)、詞語(yǔ)相似度等多種檢索模式單個(gè)文檔支持多個(gè)全文檢索字段(最大不超過(guò)32個(gè))支持額外的屬性信息支持單一字節(jié)編碼和UTF-8編碼原生支持MYSQL、PostgreSQL數(shù)據(jù)庫(kù)sphinx
的特性Sphinx單一索引最大可包含1億條記錄,在1千萬(wàn)條記錄情況下的查詢速度為0.x秒(毫秒級(jí))。Sphinx創(chuàng)建索引的速度為:創(chuàng)建100萬(wàn)條記錄的索引只需3~4分鐘,創(chuàng)建1000萬(wàn)條記錄的索引可以在50分鐘內(nèi)完成,而只包含
10萬(wàn)條記錄的增量索引,重建一次只需幾十秒。sphinx
支持的操作系統(tǒng)Linux
2.4.x,
2.6.x
(包括各種
版)Windows
2000,
XPFreeBSD
4.x,
5.x,
6.xNetBSD
1.6,
3.0Solaris
9,
11Mac
OS
XSphinx的Windows版可用于測(cè)試和調(diào)試,但不建議用于生產(chǎn)系統(tǒng)。最突出的兩個(gè)問(wèn)題是:缺少并發(fā)查詢的支持;缺少索引數(shù)據(jù)熱切換的支持。coreseek
?Coreseek是一款中文全文檢索/搜索
,基于Sphinx研發(fā)并獨(dú)立發(fā)布,專攻中文搜索和信息處理領(lǐng)域,適用于行業(yè)/垂直搜索、
/站內(nèi)搜索、數(shù)據(jù)庫(kù)搜索、文檔/文獻(xiàn)檢索、信息檢索、數(shù)據(jù)挖掘等應(yīng)用場(chǎng)景使用PHP客戶端查詢
Sphinx
的基本原理與檢索流程如何獲得sphinx從官網(wǎng),支持中文分詞的可以:從
http:
Sphinx
的壓縮包中包含以下indexer
:用來(lái)創(chuàng)建索引search
:一個(gè)命令行的測(cè)試程序searchd:
服務(wù)器端一些客戶端api
庫(kù),包含php,python,perl,ruby等。sphinx
的配置文件:sphinx.confSphinx
中的基本概念數(shù)據(jù)源索引的數(shù)據(jù)可以來(lái)自不同的來(lái)源:SQL數(shù)據(jù)庫(kù)、純文本、HTML文本、郵件等。限制:每一個(gè)文檔必須有一個(gè)ID,并且類型必須為唯一的、非零非負(fù)的整數(shù)。定義數(shù)據(jù)源sphinx.conf
配置文件中定義數(shù)據(jù)源source
名字
{...}index
索引
{...}在配置文件中可以定義多個(gè)數(shù)據(jù)源,每個(gè)數(shù)據(jù)源都有一個(gè)index項(xiàng)對(duì)應(yīng)。對(duì)應(yīng)方法:在定義index時(shí)有一項(xiàng)source
指定使用的數(shù)據(jù)源,如:source
songs{...}index
songsindex{source
=
songs}如何寫配置文件sphinx.conf
配置文件中需要定義以下內(nèi)容source{}定義數(shù)據(jù)源,可以定義多個(gè),每一個(gè)數(shù)據(jù)源對(duì)應(yīng)一個(gè)indexindex{}定義索引,每個(gè)索引對(duì)應(yīng)一個(gè)數(shù)據(jù)源indexer{}配置indexer進(jìn)程,只能有一個(gè)searchd{}配置searchd服務(wù)器進(jìn)程,只能有一個(gè)定義數(shù)據(jù)源定義數(shù)據(jù)源為songs表中的title,author,content字段source
mysql{typesql_hostsql_usersql_passsql_dbsql_portsql_query_presql_query=
mysql=
localhost=
root==
test=
3306=
SET
NAMES
utf8=
SELECT
id,title,author,content
FROM
songs}sql_query_pre:預(yù)查詢SQL語(yǔ)句,通常用來(lái)設(shè)置編碼sql_query:主查詢,其中第一個(gè)字段必須是id并且類型為非負(fù)、非空、唯一的整數(shù)Sphinx
中的基本概念分區(qū)查詢通常sphinx在建索引時(shí),是通過(guò)主查詢把數(shù)據(jù)
讀到內(nèi)存操作,但這可能導(dǎo)致在這個(gè)過(guò)程中整個(gè)表被鎖定阻塞其他連接的操作,同時(shí),會(huì)占用大量的內(nèi)存。分區(qū)查詢可以把數(shù)據(jù)分成若干份,分批處理。配置如下:sphinx.conf
文件中先取得最大值和最小值sql_query_range
=
SELECT
MIN(id),MAX(id)
FROM設(shè)置每次
的記錄數(shù)sql_range_step
=
10003.設(shè)置主查詢sql_query
=
SELECT
id,title
FROMWHERE
id
>=
$start
AND
id
<=
$end定義索引每個(gè)數(shù)據(jù)源對(duì)應(yīng)一個(gè)索引index
mysql{sourcepathdocinfo=mysql
-->對(duì)應(yīng)數(shù)據(jù)源的名字=D:/coreseek/tt/mysql
--》索引存放路徑=extern
--》屬性信息存放位置charset_dictpath
=D:/coreseek/etc/
-->分詞庫(kù)charset_type
=
.utf-8
-->編碼只支持utf8和sbcs(單字節(jié))}配置indexer程序indexer{mem_limitmax_iopsmax_iosize}=128M
-->建索引時(shí)使用的內(nèi)存量=0
-->每秒最大i/o操作次數(shù),0為=
0
-->
最大允許的i/o操作大小,0
為
,單位字節(jié)配置服務(wù)器端searchd{listenread_timeoutmax_childrenmax_matchesseamless_rotatepreopen_indexesunlink_old=9312
--》端=5
--》查詢超時(shí)時(shí)間=30
--》并發(fā)搜索數(shù),0為不限制=1000
-->最多匹配的記錄數(shù)=0
-->是否啟動(dòng)無(wú)縫切換索引=0
--》是否在服務(wù)器啟動(dòng)時(shí),打開(kāi)所有索引=1--》索引切換后是否刪除舊的索引文件log =
D:/coreseek/tt/searchd_mysql.logquery_log =
D:/coreseek/tt/query_mysql.log}sphinx
創(chuàng)建索引indexer
創(chuàng)建索引indexer-c
配置文件索引名稱(--all代表所有索引)如:根據(jù)配置文件創(chuàng)建所有索引indexer
-c
C:/sphinx.conf
--all根據(jù)配置文件創(chuàng)建叫做song的索引indexer
-c
C:/sphinx.con
gsSphinx
創(chuàng)建索引SQL數(shù)據(jù)源創(chuàng)建索引的流程連接到數(shù)據(jù)庫(kù)執(zhí)行預(yù)查詢
(sql_query_pre
,通常用來(lái)設(shè)置編碼)執(zhí)行主查詢(sql_query,主要用來(lái)取要建索引的數(shù)據(jù))執(zhí)行后查詢
(sql_query_post)關(guān)閉到數(shù)據(jù)庫(kù)的連接對(duì)數(shù)據(jù)分詞、排序創(chuàng)建索引文件再次建立到數(shù)據(jù)庫(kù)的連接執(zhí)行后索引查詢
(sql_query_post_index)再次關(guān)閉到數(shù)據(jù)庫(kù)的連接使用
search
進(jìn)試search
:
在
s
中對(duì)索引進(jìn)search-c
配置文件查詢的詞試如:search-c
D:/sphinx.conf
冬天sphinx
開(kāi)啟服務(wù)器searchd開(kāi)啟服務(wù)端searchd-c
配置文件索引名稱服務(wù)器端默認(rèn)
9312
端口。常用命令:-c:指定配置文件路徑--stop:停止當(dāng)前服務(wù)--status
:查看當(dāng)前狀態(tài)--install:安裝為
windows
服務(wù)--delete:刪除windows服務(wù)--port
port:
的端口--index indexName:只查詢某個(gè)索引,默認(rèn)查詢所有索引使用PHP
API操作
Sphinx使用php
api在sphinx的解壓
下有個(gè)apiphp,python,perl,java等sphinxapi.php
到<?phprequire('sphinxapi.php');$sc
=
new
SphinxClient();里面包含了客戶端的API,包括下,代碼示例://包含PHP驅(qū)動(dòng)文件//生成客戶端//設(shè)置服務(wù)器$sc->setServer('localhost',
9312);$res=$sc->query('
','mysql2');
//在mysql2索引中查詢匹配模式SPH_MATCH_ALL
:匹配所有查詢?cè)~(默認(rèn))SPH_MATCH_ANY:匹配查詢?cè)~中的任意一個(gè)。SPH_MATCH_PHRASE:將整個(gè)查詢?cè)~看做一個(gè)詞組,要完全匹配SPH_MATCH_BOOLEAN:將查詢看作一個(gè)布爾表達(dá)式SPH_MATCH_EXTENDED:查詢看做一個(gè)sphinx的表達(dá)式PHP中通過(guò)setMat
ode函數(shù)來(lái)設(shè)置,如:<?php$sc
=
new
SphinxClient();$sc->setMat
ode(SPH_MATCH_ANY);布爾查詢SPH_MATCH_ALL
完全匹配所有的詞如“冬天的但可以匹配“雪”,并不會(huì)匹配“我愛(ài)冬天”,朋友,愛(ài)冬天,和雪”。因?yàn)椤岸斓难北环殖伞岸臁?,“的”,“雪”三個(gè)詞,匹配條件是同時(shí)包含這三個(gè)詞,“我愛(ài)冬天”里只包含一個(gè)“冬天”布爾查詢SPH_MATCH_ANY:匹配任意一個(gè)詞如“冬天
的
雪”,并會(huì)匹配
“我愛(ài)冬天”。"冬天的雪“-》”冬天“”的“”雪“因?yàn)椤拔覑?ài)冬天”里有一個(gè)“冬天”相匹配。布爾查詢SPH_MATCH_PHRASE:必須匹配整個(gè)短語(yǔ)如“冬天的雪”,不會(huì)匹配
“
朋友,愛(ài)冬天,和雪”,雖然都包含同樣的需要嚴(yán)格匹配不再健忘,只匹配“冬天的雪”布爾查詢SPH_MATCH_EXTENDED:
支持一些擴(kuò)展的語(yǔ)法支持@字段查詢?nèi)纾樵僼itle包含
abc,content
包含
bcd的:'@title
abc
@content
bcd'布爾查詢SPH_MATCH_BOOLEAN
與,或,組&,or,!,()查詢“如:
o
|world”,或“冬天”,:<?php$sc
=
new
SphinxClient();$res=$sc->query("
|冬天");常用API。buildExcerpts:創(chuàng)建文檔close:關(guān)閉連接query:執(zhí)行查詢getLastError:返回上一條錯(cuò)誤信息open:建立到服務(wù)器端的持久連接setArrayResult:設(shè)置返回結(jié)果格式setLimits:設(shè)置返回結(jié)果數(shù)量與偏移setMat odel:設(shè)置查詢模式updateAttributes:更新文檔屬性setGroupBy
:設(shè)置分組屬性setFilter
:設(shè)置過(guò)濾器API查看:為查詢結(jié)果生成buildExcerpts
(
array
$docs
,
string
$index
,
string
$words
[,
array$opts
]
)Sphinx
中的基本概念索引合并indexer--merge
desc src[--rotate]例。把delta
索引合并到main
索引上indexer--merge
main
delta--rotate--rotate項(xiàng)是可選的,如果searchd服務(wù)器已經(jīng)啟動(dòng),則必須要加。Sphinx
中的基本概念屬性屬性是附加在每個(gè)文檔上的額外的信息??梢栽谒阉鲿r(shí)用于過(guò)濾和排序。如:把搜索出來(lái)的數(shù)據(jù)根據(jù)時(shí)間屬性排序。屬性支持的類型:無(wú)符號(hào)整數(shù)UNIX時(shí)間戳浮點(diǎn)值字符串(
sql_attr_uint)(
sql_attr_timestamp
)(
sql_attr_float
)( sql_attr_str2ordinal
)多值屬性
MVA (
sql_attr_multi
)實(shí)時(shí)索引更新有這么一種常見(jiàn)的情況:整個(gè)數(shù)據(jù)集非常大,以至于難于經(jīng)常性的重建索引,但是每次新增的記錄卻相當(dāng)?shù)厣佟R粋€(gè)典型的例子是:一個(gè)
有1000000個(gè)已經(jīng)歸檔的帖子,但每天只有1000個(gè)新帖子。如果為這1000條記錄重建所有索引將花費(fèi)很長(zhǎng)時(shí)間。解決的辦法是:“主索引+增量索引”模式來(lái)實(shí)現(xiàn)“近實(shí)時(shí)”的索引更新。實(shí)現(xiàn)思路:把數(shù)據(jù)分成兩部分分別索引建立初始數(shù)據(jù)主索引定期創(chuàng)建增量部分的索引,并把增量的索引合并到主索引上。主索引
+增量索引的實(shí)現(xiàn)第一步:創(chuàng)建一張表用來(lái)記錄已經(jīng)索引的記錄條數(shù)create
table
a{id
int
unsigned
not
null,max_id
int
unsigned
not
null
default
'0',primary
key
(id)}主索
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報(bào)參考:金融高質(zhì)量發(fā)展視角下的區(qū)域廣義協(xié)調(diào)發(fā)展機(jī)理與政策統(tǒng)籌研究
- 課題申報(bào)參考:減碳責(zé)任量化與多產(chǎn)品企業(yè)投資綠色轉(zhuǎn)型:內(nèi)在機(jī)理、效應(yīng)評(píng)估與策略選擇
- 2025版委托擔(dān)保合同范本:供應(yīng)鏈金融合作風(fēng)險(xiǎn)控制協(xié)議3篇
- 二零二五版國(guó)際物流保險(xiǎn)合同訂立與理賠3篇
- 2025年伊犁貨車從業(yè)資格證考什么
- 2025年度個(gè)人自建別墅地基買賣合同8篇
- 二零二五年度混凝土工程進(jìn)度協(xié)調(diào)協(xié)議2篇
- 二零二五版木材加工企業(yè)環(huán)保責(zé)任承諾合同4篇
- 2025年建筑鋼材批量供應(yīng)及售后保障合同3篇
- 二零二五年度夫妻離婚后子女醫(yī)療費(fèi)用分擔(dān)協(xié)議2篇
- 2025-2030年中國(guó)陶瓷電容器行業(yè)運(yùn)營(yíng)狀況與發(fā)展前景分析報(bào)告
- 二零二五年倉(cāng)儲(chǔ)配送中心物業(yè)管理與優(yōu)化升級(jí)合同3篇
- 2025屆廈門高三1月質(zhì)檢期末聯(lián)考數(shù)學(xué)答案
- 音樂(lè)作品錄制許可
- 江蘇省無(wú)錫市2023-2024學(xué)年高三上學(xué)期期終教學(xué)質(zhì)量調(diào)研測(cè)試語(yǔ)文試題(解析版)
- 拉薩市2025屆高三第一次聯(lián)考(一模)英語(yǔ)試卷(含答案解析)
- 開(kāi)題報(bào)告:AIGC背景下大學(xué)英語(yǔ)教學(xué)設(shè)計(jì)重構(gòu)研究
- 師德標(biāo)兵先進(jìn)事跡材料師德標(biāo)兵個(gè)人主要事跡
- 連鎖商務(wù)酒店述職報(bào)告
- 2024年山東省煙臺(tái)市初中學(xué)業(yè)水平考試地理試卷含答案
- 《實(shí)踐論》(原文)毛澤東
評(píng)論
0/150
提交評(píng)論