版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
傳智播客教育sphinx講師::為什么要用sphinx?當(dāng)對大文本數(shù)據(jù)進(jìn)行單詞匹配查詢時,一個歌曲,數(shù)據(jù)庫中收集著上百萬首歌曲的信息,如果要查詢出歌詞中帶“冬天”的所有歌曲,典型的做法是執(zhí)行如下SQL語句:SELECT
*
FROM
songs
WHERE
content
LIKE"%php%"。但是在MYSQL中以%開頭的查詢無法使用索引,所以這條SQL語句將執(zhí)行全表掃描,性能極差。MyISAM引擎中的全文索引是專門對文本創(chuàng)建索引的,但對中文的支持不好。好的解決方案:使用sphinx
!Sphinx
?Sphinx是一個獨(dú)立的全文索引引擎,意圖為其他應(yīng)用提供高速、低空間占用、搜索結(jié)果高相關(guān)度的全文搜索功能。Sphinx可以非常容易的與SQL數(shù)據(jù)庫和
語言集成。內(nèi)置MySQL和PostgreSQL數(shù)據(jù)庫數(shù)據(jù)源的支持。搜索API支持PHP、Python、Perl、Rudy和Java。sphinx
的特性高速的建立索引(可達(dá)10M/秒)高性能的搜索(平均檢索時間小于0.1秒)可處理海量數(shù)據(jù)提供了優(yōu)秀的相關(guān)度算法支持分布式搜索提供
生成功能可作為MYSQL
引擎提供搜索服務(wù)支持布爾、短語、詞語相似度等多種檢索模式單個文檔支持多個全文檢索字段(最大不超過32個)支持額外的屬性信息支持單一字節(jié)編碼和UTF-8編碼原生支持MYSQL、PostgreSQL數(shù)據(jù)庫sphinx
的特性Sphinx單一索引最大可包含1億條記錄,在1千萬條記錄情況下的查詢速度為0.x秒(毫秒級)。Sphinx創(chuàng)建索引的速度為:創(chuàng)建100萬條記錄的索引只需3~4分鐘,創(chuàng)建1000萬條記錄的索引可以在50分鐘內(nèi)完成,而只包含
10萬條記錄的增量索引,重建一次只需幾十秒。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版可用于測試和調(diào)試,但不建議用于生產(chǎn)系統(tǒng)。最突出的兩個問題是:缺少并發(fā)查詢的支持;缺少索引數(shù)據(jù)熱切換的支持。coreseek
?Coreseek是一款中文全文檢索/搜索
,基于Sphinx研發(fā)并獨(dú)立發(fā)布,專攻中文搜索和信息處理領(lǐng)域,適用于行業(yè)/垂直搜索、
/站內(nèi)搜索、數(shù)據(jù)庫搜索、文檔/文獻(xiàn)檢索、信息檢索、數(shù)據(jù)挖掘等應(yīng)用場景使用PHP客戶端查詢
Sphinx
的基本原理與檢索流程如何獲得sphinx從官網(wǎng),支持中文分詞的可以:從
http:
Sphinx
的壓縮包中包含以下indexer
:用來創(chuàng)建索引search
:一個命令行的測試程序searchd:
服務(wù)器端一些客戶端api
庫,包含php,python,perl,ruby等。sphinx
的配置文件:sphinx.confSphinx
中的基本概念數(shù)據(jù)源索引的數(shù)據(jù)可以來自不同的來源:SQL數(shù)據(jù)庫、純文本、HTML文本、郵件等。限制:每一個文檔必須有一個ID,并且類型必須為唯一的、非零非負(fù)的整數(shù)。定義數(shù)據(jù)源sphinx.conf
配置文件中定義數(shù)據(jù)源source
名字
{...}index
索引
{...}在配置文件中可以定義多個數(shù)據(jù)源,每個數(shù)據(jù)源都有一個index項(xiàng)對應(yīng)。對應(yīng)方法:在定義index時有一項(xiàng)source
指定使用的數(shù)據(jù)源,如:source
songs{...}index
songsindex{source
=
songs}如何寫配置文件sphinx.conf
配置文件中需要定義以下內(nèi)容source{}定義數(shù)據(jù)源,可以定義多個,每一個數(shù)據(jù)源對應(yīng)一個indexindex{}定義索引,每個索引對應(yīng)一個數(shù)據(jù)源indexer{}配置indexer進(jìn)程,只能有一個searchd{}配置searchd服務(wù)器進(jìn)程,只能有一個定義數(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語句,通常用來設(shè)置編碼sql_query:主查詢,其中第一個字段必須是id并且類型為非負(fù)、非空、唯一的整數(shù)Sphinx
中的基本概念分區(qū)查詢通常sphinx在建索引時,是通過主查詢把數(shù)據(jù)
讀到內(nèi)存操作,但這可能導(dǎo)致在這個過程中整個表被鎖定阻塞其他連接的操作,同時,會占用大量的內(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定義索引每個數(shù)據(jù)源對應(yīng)一個索引index
mysql{sourcepathdocinfo=mysql
-->對應(yīng)數(shù)據(jù)源的名字=D:/coreseek/tt/mysql
--》索引存放路徑=extern
--》屬性信息存放位置charset_dictpath
=D:/coreseek/etc/
-->分詞庫charset_type
=
.utf-8
-->編碼只支持utf8和sbcs(單字節(jié))}配置indexer程序indexer{mem_limitmax_iopsmax_iosize}=128M
-->建索引時使用的內(nèi)存量=0
-->每秒最大i/o操作次數(shù),0為=
0
-->
最大允許的i/o操作大小,0
為
,單位字節(jié)配置服務(wù)器端searchd{listenread_timeoutmax_childrenmax_matchesseamless_rotatepreopen_indexesunlink_old=9312
--》端=5
--》查詢超時時間=30
--》并發(fā)搜索數(shù),0為不限制=1000
-->最多匹配的記錄數(shù)=0
-->是否啟動無縫切換索引=0
--》是否在服務(wù)器啟動時,打開所有索引=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ù)庫執(zhí)行預(yù)查詢
(sql_query_pre
,通常用來設(shè)置編碼)執(zhí)行主查詢(sql_query,主要用來取要建索引的數(shù)據(jù))執(zhí)行后查詢
(sql_query_post)關(guān)閉到數(shù)據(jù)庫的連接對數(shù)據(jù)分詞、排序創(chuàng)建索引文件再次建立到數(shù)據(jù)庫的連接執(zhí)行后索引查詢
(sql_query_post_index)再次關(guān)閉到數(shù)據(jù)庫的連接使用
search
進(jìn)試search
:
在
s
中對索引進(jìn)search-c
配置文件查詢的詞試如:search-c
D:/sphinx.conf
冬天sphinx
開啟服務(wù)器searchd開啟服務(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:只查詢某個索引,默認(rèn)查詢所有索引使用PHP
API操作
Sphinx使用php
api在sphinx的解壓
下有個apiphp,python,perl,java等sphinxapi.php
到<?phprequire('sphinxapi.php');$sc
=
new
SphinxClient();里面包含了客戶端的API,包括下,代碼示例://包含PHP驅(qū)動文件//生成客戶端//設(shè)置服務(wù)器$sc->setServer('localhost',
9312);$res=$sc->query('
','mysql2');
//在mysql2索引中查詢匹配模式SPH_MATCH_ALL
:匹配所有查詢詞(默認(rèn))SPH_MATCH_ANY:匹配查詢詞中的任意一個。SPH_MATCH_PHRASE:將整個查詢詞看做一個詞組,要完全匹配SPH_MATCH_BOOLEAN:將查詢看作一個布爾表達(dá)式SPH_MATCH_EXTENDED:查詢看做一個sphinx的表達(dá)式PHP中通過setMat
ode函數(shù)來設(shè)置,如:<?php$sc
=
new
SphinxClient();$sc->setMat
ode(SPH_MATCH_ANY);布爾查詢SPH_MATCH_ALL
完全匹配所有的詞如“冬天的但可以匹配“雪”,并不會匹配“我愛冬天”,朋友,愛冬天,和雪”。因?yàn)椤岸斓难北环殖伞岸臁?,“的”,“雪”三個詞,匹配條件是同時包含這三個詞,“我愛冬天”里只包含一個“冬天”布爾查詢SPH_MATCH_ANY:匹配任意一個詞如“冬天
的
雪”,并會匹配
“我愛冬天”。"冬天的雪“-》”冬天“”的“”雪“因?yàn)椤拔覑鄱臁崩镉幸粋€“冬天”相匹配。布爾查詢SPH_MATCH_PHRASE:必須匹配整個短語如“冬天的雪”,不會匹配
“
朋友,愛冬天,和雪”,雖然都包含同樣的需要嚴(yán)格匹配不再健忘,只匹配“冬天的雪”布爾查詢SPH_MATCH_EXTENDED:
支持一些擴(kuò)展的語法支持@字段查詢?nèi)?,查詢title包含
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:返回上一條錯誤信息open:建立到服務(wù)器端的持久連接setArrayResult:設(shè)置返回結(jié)果格式setLimits:設(shè)置返回結(jié)果數(shù)量與偏移setMat odel:設(shè)置查詢模式updateAttributes:更新文檔屬性setGroupBy
:設(shè)置分組屬性setFilter
:設(shè)置過濾器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)啟動,則必須要加。Sphinx
中的基本概念屬性屬性是附加在每個文檔上的額外的信息??梢栽谒阉鲿r用于過濾和排序。如:把搜索出來的數(shù)據(jù)根據(jù)時間屬性排序。屬性支持的類型:無符號整數(shù)UNIX時間戳浮點(diǎn)值字符串(
sql_attr_uint)(
sql_attr_timestamp
)(
sql_attr_float
)( sql_attr_str2ordinal
)多值屬性
MVA (
sql_attr_multi
)實(shí)時索引更新有這么一種常見的情況:整個數(shù)據(jù)集非常大,以至于難于經(jīng)常性的重建索引,但是每次新增的記錄卻相當(dāng)?shù)厣?。一個典型的例子是:一個
有1000000個已經(jīng)歸檔的帖子,但每天只有1000個新帖子。如果為這1000條記錄重建所有索引將花費(fèi)很長時間。解決的辦法是:“主索引+增量索引”模式來實(shí)現(xiàn)“近實(shí)時”的索引更新。實(shí)現(xiàn)思路:把數(shù)據(jù)分成兩部分分別索引建立初始數(shù)據(jù)主索引定期創(chuàng)建增量部分的索引,并把增量的索引合并到主索引上。主索引
+增量索引的實(shí)現(xiàn)第一步:創(chuàng)建一張表用來記錄已經(jīng)索引的記錄條數(shù)create
table
a{id
int
unsigned
not
null,max_id
int
unsigned
not
null
default
'0',primary
key
(id)}主索
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025廣東建筑安全員知識題庫附答案
- 貴州財經(jīng)職業(yè)學(xué)院《現(xiàn)代西方哲學(xué)專題》2023-2024學(xué)年第一學(xué)期期末試卷
- 蠶豆產(chǎn)業(yè)基地建設(shè)項(xiàng)目可行性研究報告-蠶豆市場需求持續(xù)擴(kuò)大
- 貴陽康養(yǎng)職業(yè)大學(xué)《醫(yī)療健康商務(wù)溝通》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州中醫(yī)藥大學(xué)《生物統(tǒng)計附試驗(yàn)設(shè)計實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年-吉林省安全員知識題庫附答案
- 廣州現(xiàn)代信息工程職業(yè)技術(shù)學(xué)院《心理咨詢與心理輔導(dǎo)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年-河北省安全員B證考試題庫
- 2025建筑安全員A證考試題庫
- 2025年山西省建筑安全員-C證考試(專職安全員)題庫及答案
- 事業(yè)單位考試《綜合知識和能力測試》試卷
- 2023年山西普通高中會考信息技術(shù)真題及答案
- 老人健康飲食知識講座
- 福利住房與購房補(bǔ)貼制度
- 康師傅烏龍茗茶營銷策劃書
- 浙江省溫州市2022-2023學(xué)年四年級上學(xué)期語文期末試卷(含答案)
- 【川教版】《生命 生態(tài) 安全》四上第13課《預(yù)防凍瘡》課件
- 工廠籌建方案
- UPVC管道安裝施工方法
- 河南省鄭州高新技術(shù)產(chǎn)業(yè)開發(fā)區(qū)2023-2024學(xué)年三年級上學(xué)期1月期末科學(xué)試題
- 女裝行業(yè)退貨率分析
評論
0/150
提交評論