僅適用於SQL數據源(mysql,pgsql,mssql)。
這個屬性類型(簡稱為字串序數)的設計是為了允許按字符串值排序,但不存儲字符串本身。對字串序數做索引時,字符串值從數據庫中取出、暫存、排序然後用它們在該有序數組中的序數代替它們自身,因此字串序數是個整型,對它們的大小比較與在原字串上做字典序比較結果相同。
早期版本上,對字串序數做索引可能消耗大量的RAM。自r1112起,字串序數的積累和排序也可在固定大小的內存中解決了(代價是額外的臨時磁盤空間),並受mem_limit設置限制。
理想中字符串可以根據字符編碼和本地字符集(locale)排序。例如,如果已知字符串為KOI8R編碼下的俄語字串,那麽對字節0xE0,0xE1和
0xE2排序結果應為0xE1,0xE2和0xE0,因為0xE0在KOI8R中代表的字符明顯應在0xE1和0xE2之後。但很不幸,Sphinx目前
不支持這個功能,而是簡單地按字節值大小排序。
請註意,這裏的序號是每個索引根據自身數據計算的,因此在同時讀取多個索引事實無法同時保留正確的順序進行合並的。處理後的字符串被替換為處理時其在索引
中的序列號,但是不同的索引具有不同的字符串集。例如,如果'main'索引包含字符串"aaa", "bbb", "ccc", 直到
"zzz",它們將會被分別分配數值為1,2,3,直到26。但是'delta'如果僅包含"zzz",則會被分配數值1。那麽在合並後,該順序將被打
亂。不幸的是,在不存儲原始字符串的情況下,這個問題無法解決(壹旦存儲原始字符串,序號將沒有任何用處了)。
妳的版本比我高,我用的
Sphinx 0.9.9/Coreseek 3.2