sphinx續4 coreseek的工作原理

2022-08-18 05:48:12 字數 3834 閱讀 8184

在分析sphix原理之前,我先澄清一下為什麼經常出現coreseek這個詞?

因為sphinx預設不支援中文索引及檢索,而coreseek基於sphinx開發了coreseek全文檢索伺服器,它提供了為sphinx設計的中文分詞包libmmseg包含mmseg中文分詞,是目前用的最多的sphinx中文檢索。

在沒有sphinx之前,mysql資料庫要對海量的文章中的詞進行全文索引,一般用的語句例如:select   ***  where  ***  like   '%word%';這樣的like查詢,並且再結合萬用字元%,是使用不到mysql本身的索引,需要全表掃瞄,時間超慢的!

如果用到sphinx,全文索引交給sphinx來做,sphinx返回含有該word的id號,然後用該id號直接去資料庫準確定位那些資料,整個過程如下圖:

sphinx的索引檔案儲存的不是完整的資料,只是由id和分詞組成的陣列,由於索引檔案不同直接檢視,但我們可以通過search工具來驗證:

先建索引:

/usr/local/coreseek/bin/indexer -c

/usr/local/coreseek/etc/sphinx.conf

coreseek fulltext 4.1 [ sphinx 2.0.2-dev

(r2922)]

beijing choice software technologies inc

( 再通過search 查詢單詞test:

/usr/local/coreseek/bin/search test -c

/usr/local/coreseek/etc/sphinx.conf

coreseek fulltext 4.1 [ sphinx 2.0.2-dev

(r2922)]

beijing choice software technologies inc

( using config file '/usr/local/coreseek/etc/sphinx.conf'...

index 'test1': query 'test ': returned 3

matches of 3 total in 0.050 sec

displaying matches:

1. document=1, weight=2421, group_id=1,

date_added=thu jan  8 21:43:32 2015

id=1

group_id=1

group_id2=5

date_added=2015-01-08

21:43:32

title=test

one

content=this

is my test document number one. also checking search within phrases.

2. document=2, weight=2421, group_id=1,

date_added=thu jan  8 21:43:32 2015

id=2

group_id=1

group_id2=6

date_added=2015-01-08

21:43:32

title=test

two

content=this

is my test document number two

3. document=4, weight=1442, group_id=2,

date_added=thu jan  8 21:43:32 2015

id=4

group_id=2

group_id2=8

date_added=2015-01-08

21:43:32

title=doc

number four

content=this

is to test groups

words:

1. 'test': 3 documents, 5 hits

再通過search 查詢單詞this:

/usr/local/coreseek/bin/search this -c

/usr/local/coreseek/etc/sphinx.conf

coreseek fulltext 4.1 [ sphinx 2.0.2-dev

(r2922)]

beijing choice software technologies inc

( using config file

'/usr/local/coreseek/etc/sphinx.conf'...

index 'test1': query 'this ': returned 4

matches of 4 total in 0.000 sec

displaying matches:

1. document=1, weight=1304, group_id=1,

date_added=thu jan  8 21:43:32 2015

id=1

group_id=1

group_id2=5

date_added=2015-01-08

21:43:32

title=test

one

content=this

is my test document number one. also checking search within phrases.

2. document=2, weight=1304, group_id=1,

date_added=thu jan  8 21:43:32 2015

id=2

group_id=1

group_id2=6

date_added=2015-01-08

21:43:32

title=test

two

content=this

is my test document number two

3. document=3, weight=1304, group_id=2,

date_added=thu jan  8 21:43:32 2015

id=3

group_id=2

group_id2=7

date_added=2015-01-08

21:43:32

title=another

doc

content=this

is another group

4. document=4, weight=1304, group_id=2,

date_added=thu jan  8 21:43:32 2015

id=4

group_id=2

group_id2=8

date_added=2015-01-08

21:43:32

title=doc

number four

content=this

is to test groups

words:

1. 'this': 4 documents, 4 hits

主要返回的是含有表id和命中率的陣列。

注意:不知道大家有沒有想到乙個致命的問題,建立了sphinx全文索引後,如果在mysql中新增加資料,不重新indexer一下,sphinx索引是搜尋不到的!即使是加引數–rotate,資料多的情況下,也要很長時間,這個問題怎麼解決呢!明天就來講主索引和增量索引,以及用cron來處理新資料自動加入增量索引中。

補充:

Sphinx4語音識別的框架

sphinx4主要由三個基本模組構成 frontend,decoder,linguist。frontend接受訊號的輸入並且轉化為特徵序列。linguist把任何型別的標準語言模型,字典的發音資訊以及一些聲學模型的結構資訊轉換為乙個searchgraph。在decoder 中的searchmanag...

例項講解4 awk命令e續

注 p最小為1,當p為0時,p被置為1 n個字元包括p所在字元。system cmd 執行命令並返回出口狀態 toupper s 將輸入引數s中的字元全部轉換為大寫字元並返回轉換後的字串 tolower s 將輸入引數s中的字元全部轉換為小寫字元並返回轉換後的字串 close expr 關閉由exp...

設計模式(4) 觀察者模式(續)

簡單工廠模式和工廠模式是用來例項化類的一種設計模式,工廠模式相比簡單工廠模式實現了所有要例項化類的抽象,並根據該抽象類的子類來實現各個類的例項化物件,該方式充分體現了依賴倒置原則,充分體現了針對介面程式設計而不是針對實現程式設計的原理 模式是一種十分好理解的設計模式,首先是有乙個抽象的功能類,包含了...