coreseek sphinx文件摘要

2021-07-07 09:52:51 字數 2984 閱讀 5812

1.這些都可以用charset_typecharset_table選項為每個索引單獨配置.charset_type指定文件的編碼是單位元組的(sbcs)還是utf-8的。在coreseek中,如果通過charset_dictpath設定中文詞典啟動了中文分詞模式後,不僅可以使用utf-8編碼的,還可以使用gbk及big5的編碼(需要編譯時提供iconv支援);但是在內部實現中,仍然是預先轉換成utf-8編碼在進行處理的.charset_table則指定了字母類字元到它們的大小寫轉換版本的對應表,沒有在這張表中出現的字元被認為是非字母類字元,並且在建立索引和檢索時被當作詞的分割符來看待。

在coreseek中,啟用中文分詞後,系統會使用mmseg內建的碼表(被硬編碼在mmseg的程式中),因此,charset_table在啟用分詞後將失效。

2.由於歷史原因,php api對結果集的行進行按文件id的有序hash,因此用php api進行對mva屬性的分組操作時你還需要使用 setarrayresult().

3.當採用外部儲存方式時,searchd總是在ram中保持乙份.spa檔案的拷貝(該檔案包含所有文件的所有文件資訊)。這是主要是為了提高效能,因為磁碟的隨機訪問太慢了。相反,內聯儲存並不需要任何額外的ram,但代價是索引檔案的體積大大地增加了;請注意,全部

屬性值在文件id出現的每一處

都被複製了乙份,而文件id出現的次數恰是文件中不同關鍵字的數目。僅當有乙個很小的屬性集、龐大的文字資料集和受限的ram時,內聯儲存才是乙個可考慮的選擇。在大多數情況下,外部儲存可令建立索引和檢索的效率都大幅提高。

檢索時,採用外部儲存方式產生的的記憶體需求為 (1+屬性總數)*文件總數*4位元組,也就是說,帶有兩個屬性和乙個時間戳的1千萬篇文件會消耗(1+2+1)*10m*4 = 160 mb的ram。這是每個檢索的守護程序(per daemon

)消耗的量,而不是每次查詢,searchd僅在啟動時分配160mb的記憶體,讀入資料並在不同的查詢之間保持這些資料。子程序並不會

對這些資料做額外的拷貝。

4.對於所有的基於sql驅動,建立索引的過程如下:

5. 索引系統需要通過主查詢來獲取全部的文件資訊,一種簡單的實現是將整個表的資料讀入記憶體,但是這可能導致整個表被鎖定並使得其他操作被阻止(例如:在myisam格式上的insert操作),同時,將浪費大量記憶體用於儲存查詢結果,諸如此類的問題吧。為了避免出現這種情況,coreseek/sphinx支援一種被稱為 區段查詢的技術.首先,coreseek/sphinx從資料庫中取出文件id的最小值和最大值,將由最大值和最小值定義自然數區間分成若干份,一次獲取資料,建立索引。現舉例如下:

例 3.1. 範圍查詢用法舉例

# in sphinx.conf

sql_query_range = select min(id),max(id) from documents

sql_range_step = 1000

sql_query = select * from documents where id>=$start and id<=$end

如果這個表(documents)中,欄位id的最小值和最大值分別是1 和2345,則sql_query將執行3次:

$start替換為1,並且將$end替換為 1000;

$start替換為1001,並且將$end替換為 2000;

$start替換為2001,並且將$end替換為 2345.

顯然,這對於只有2000行的表,分割槽查詢與整個讀入沒有太大區別,但是當表的規模擴大到千萬級(特別是對於myisam格式的表),分割槽區段查詢將提供一些幫助。

6.合併兩個已有的索引比重新對所有資料做索引更有效率,而且有時候必須這樣做(例如在「主索引+增量索引」分割槽模式中應合併主索引和增量索引,而不是簡單地重新索引「主索引對應的資料)

基本的命令語法如下:

indexer --merge dstindex srcindex [--rotate]
srcindex的內容被合併到dstindex中,因此只有dstindex索引會被改變。若dstindex已經被searchd於提供服務,則--rotate引數是必須的。最初設計的使用模式是,將小量的更新從srcindex合併到dstindex中。因此,當屬性被合併時,一旦出現了重複的文件id,srcindex中的屬性值更優先(會覆蓋dstindex中的值)。不過要注意,「舊的」關鍵字在這個過程中並不

會被自動刪除。例如,在dstindex中有乙個叫做「old」的關鍵字與文件123相關聯,而在srcindex中則有關鍵字「new」與同乙個文件相關,那麼在合併後用這兩個關鍵字都

能找到文件123。您可以給出乙個顯式條件來將文件從dstindex中移除,以便應對這種情況,相關的開關是--merge-dst-range:

indexer --merge main delta --merge-dst-range deleted 0 0
這個開關允許您在合併過程中對目標索引實施過濾。過濾器可以有多個,只有滿足全部過濾條件的文件才會在最終合併後的索引中出現。在上述例子中,過濾器只允許「deleted」為0的那些條件通過,而去除所有標記為已刪除(「deleted」)的記錄(可以通過呼叫updateattributes()設定文件的屬性)。

7.. rt實時索引定義

index rt

rt索引目前還在繼續開發完善中(從版本1.10-beta開始)。因此,他可能缺乏某些特定的功能:例如,字首/中綴索引,mva屬性等目前尚不支援。但是,所有常規索引功能和搜尋功能都已經實現,並且經過了內部的測試。我們還有一些實際運營生產環境(並非最不重要的部分)已經在使用rt索引,並且取得了較好的效果。

8.

NSSpeechSynthesizer 文字變語音

nsspeechsynthesizer 是 foundation中的乙個類,這個類可以方便的在cocoa應用程式中新增 文字到語言 功能。開發者可以使用這個類向ios 引用程式中新增類似功能。效果圖如下 截圖 speechutterance引數說明 utterance.voice 語系 不區分大小寫...

FileSystemWatcher判斷檔案複製完成

使用 filesystemwatcher 監視指定目錄中的更改。可監視指定目錄中的檔案或子目錄的更改。該元件可以監視本地計算機 網路驅動器或遠端計算機上的檔案。可監視目錄或檔案中的若干種更改。例如,可監視檔案或目錄的 attributes lastwrite 日期和時間或 size 方面的更改。通過...

Vmware Window Linux 共享資料夾

問題描述 在虛擬機器vmware 8.0下,其中宿主機系統為window 7,安裝的虛擬機器系統為ubuntu 12.04 x64,通過使用共享資料夾的方式,實現兩個系統的通訊。預備工作 虛擬機器需要安裝vmware tools。解決方案 1.在虛擬機器的詳細設定下,選擇啟用共享資料夾。右擊虛擬機器...