国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

定義Lucene 1.3 用到的索引文件格式

2019-11-18 13:16:22
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  Jakarta LUCene是用java寫(xiě)成的,同時(shí)有很多團(tuán)體正在默默的用其他的程序語(yǔ)言來(lái)改寫(xiě)它。假如這些新的版本想和Jakarta Lucene兼容,就需要一個(gè)與具體語(yǔ)言無(wú)關(guān)的Lucene索引文件格式。本文正是試圖提供一個(gè)完整的與語(yǔ)言無(wú)關(guān)的Jakarta Lucene 1.3索引文件格式的規(guī)格定義。
  
  隨著Lucene不斷發(fā)展,本文也應(yīng)該更新。不同語(yǔ)言寫(xiě)成的Lucene實(shí)現(xiàn)版本應(yīng)當(dāng)盡力遵守文件格式,也必須產(chǎn)生本文的新版本。
  
  本文同時(shí)提供兼容性批注,描述文件格式上與前一版本不同的地方。
  
  定義
  Lucene中最基礎(chǔ)的概念是索引(index),文檔(document.,域(field)和項(xiàng)(term)。
  
  索引包含了一個(gè)文檔的序列。
  
  ·  文檔是一些域的序列。
  
  ·  域是一些項(xiàng)的序列。
  
  ·  項(xiàng)就是一個(gè)字串。
  
  存在于不同域中的同一個(gè)字串被認(rèn)為是不同的項(xiàng)。因此項(xiàng)實(shí)際是用一對(duì)字串表示的,第一個(gè)字串是域名,第二個(gè)是域中的字串。
  
  倒排索引
  為了使得基于項(xiàng)的搜索更有效率,索引中項(xiàng)是靜態(tài)存儲(chǔ)的。Lucene的索引屬于索引方式中的倒排索引,因?yàn)閷?duì)于一個(gè)項(xiàng)這種索引可以列出包含它的文檔。這剛好是文檔與項(xiàng)自然聯(lián)系的倒置。
  
  域的類型
  Lucene中,域的文本可能以逐字的非倒排的方式存儲(chǔ)在索引中。而倒排過(guò)的域稱為被索引過(guò)了。域也可能同時(shí)被存儲(chǔ)和被索引。
  
  域的文本可能被分解許多項(xiàng)目而被索引,或者就被用作一個(gè)項(xiàng)目而被索引。大多數(shù)的域是被分解過(guò)的,但是有些時(shí)候某些標(biāo)識(shí)符域被當(dāng)做一個(gè)項(xiàng)目索引是很有用的。
  
  段(Segment)
  Lucene索引可能由多個(gè)子索引組成,這些子索引成為段。每一段都是完整獨(dú)立的索引,能被搜索。索引是這樣作成的:
  
  1.  為新加入的文檔創(chuàng)建新段。
  
  2.  合并已經(jīng)存在的段。
  
  搜索時(shí)需要涉及到多個(gè)段和/或者多個(gè)索引,每一個(gè)索引又可能由一些段組成。
  
  文檔號(hào)(document.nbspNumber)
  內(nèi)部的來(lái)說(shuō),Lucene用一個(gè)整形(interger)的文檔號(hào)來(lái)指示文檔。第一個(gè)被加入到索引中的文檔就是0號(hào),順序加入的文檔將得到一個(gè)由前一個(gè)號(hào)碼遞增而來(lái)的號(hào)碼。
  
  注重文檔號(hào)是可能改變的,所以在Lucene外部存儲(chǔ)這些號(hào)碼時(shí)必須小心。非凡的,號(hào)碼的改變的情況如下:
  
  ·  只有段內(nèi)的號(hào)碼是相同的,不同段之間不同,因而在一個(gè)比段廣泛的上下文環(huán)境中使用這些號(hào)碼時(shí),就必須改變它們。標(biāo)準(zhǔn)的技術(shù)是根據(jù)每一段號(hào)碼多少為每一段分配一個(gè)段號(hào)。將段內(nèi)文檔號(hào)轉(zhuǎn)換到段外時(shí),加上段號(hào)。將某段外的文檔號(hào)轉(zhuǎn)換到段內(nèi)時(shí),根據(jù)每段中可能的轉(zhuǎn)換后號(hào)碼范圍來(lái)判定文檔屬于那一段,并減調(diào)這一段的段號(hào)。例如有兩個(gè)含5個(gè)文檔的段合并,那么第一段的段號(hào)就是0,第二段段號(hào)5。第二段中的第三個(gè)文檔,在段外的號(hào)碼就是8。
  
  ·  文檔刪除后,連續(xù)的號(hào)碼就出現(xiàn)了間斷。這可以通過(guò)合并索引來(lái)解決,段合并時(shí)刪除的文檔相應(yīng)也刪掉了,新合并而成的段并沒(méi)有號(hào)碼間斷。
  
  緒論
  索引段維護(hù)著以下的信息:
  
  ·  域集合。包含了索引中用到的所有的域。
  
  ·  域值存儲(chǔ)表。每一個(gè)文檔都含有一個(gè)“屬性-值”對(duì)的列表,屬性即為域名。這個(gè)列表用來(lái)存儲(chǔ)文檔的一些附加信息,如標(biāo)題,url或者訪問(wèn)數(shù)據(jù)庫(kù)的一個(gè)ID。在搜索時(shí)存儲(chǔ)域的集合可以被返回。這個(gè)表以文檔號(hào)標(biāo)識(shí)。
  
  ·  項(xiàng)字典。這個(gè)字典含有所有文檔的所有域中使用過(guò)的的項(xiàng),同時(shí)含有使用過(guò)它的文檔的文檔號(hào),以及指向使用頻數(shù)信息和位置信息的指針。
  
  ·  項(xiàng)頻數(shù)信息。對(duì)于項(xiàng)字典中的每個(gè)項(xiàng),這些信息包含含有這個(gè)項(xiàng)的文檔的總數(shù),以及每個(gè)文檔中使用的次數(shù)。
  
  ·  項(xiàng)位置信息。對(duì)于項(xiàng)字典中的每個(gè)項(xiàng),都存有在每個(gè)文檔中出現(xiàn)的各個(gè)位置。
  
  ·  Normalization factors. For each field in each document. a value is stored that is multiplied into the score for hits on that field. 標(biāo)準(zhǔn)化因子。對(duì)于文檔中的每一個(gè)域,存有一個(gè)值,用來(lái)以后乘以這個(gè)這個(gè)域的命中數(shù)(hits)。
  
  ·  被刪除的文檔信息。這是一個(gè)可選文件,用來(lái)表明那些文檔已經(jīng)刪除了。
  
  接下來(lái)的各部分部分具體描述這些信息。
  
  文件的命名(File Naming)
  同屬于一個(gè)段的文件擁有相同的文件名,不同的擴(kuò)展名。擴(kuò)展名由以下討論的各種文件格式確定。
  
  一般來(lái)說(shuō),一個(gè)索引存放一個(gè)目錄,其所有段都存放在這個(gè)目錄里,盡管我們不要求您這樣做。
  
  基本數(shù)據(jù)類型(PRimitive Types)
  Byte
  
  最基本的數(shù)據(jù)類型就是字節(jié)(byte,8位)。文件就是按字節(jié)順序訪問(wèn)的。其它的一些數(shù)據(jù)類型也定義為字節(jié)的序列,文件的格式具有字節(jié)意義上的獨(dú)立性。
  
  UInt32
  
  32位無(wú)符號(hào)整數(shù),由四個(gè)字節(jié)組成,高位優(yōu)先。
  
  UInt32 --> <Byte>4
  
  Uint64
  
  64位無(wú)符號(hào)整數(shù),由八字節(jié)組成,高位優(yōu)先。
  
  UInt64 --> <Byte>8
  
  VInt
  
  可變長(zhǎng)的正整數(shù)類型,每字節(jié)的最高位表明還剩多少字節(jié)。每字節(jié)的低七位表明整數(shù)的值。因此單字節(jié)的值從0到127,兩字節(jié)值從128到16,383,等等。
  
  VInt 編碼示例
  value
   First byte
   Second byte
   Third byte
  
  0
   00000000
   
  1
   00000001
   
  2
   00000010
  
  ...
   
  127
   01111111
   
  128
   10000000
   00000001
  
  129
   10000001
   00000001
  
  130
   10000010
   00000001
   ...
  16,383
   11111111
   01111111
  
  16,384
   10000000
   10000000
   00000001
  
  16,385
   10000001
   10000000
   00000001
  ...
   
  這種編碼提供了一種在高效率解碼時(shí)壓縮數(shù)據(jù)的方法。
  
  Chars
  
  Lucene輸出UNICODE字符序列,使用標(biāo)準(zhǔn)UTF-8編碼。
  
  String
  
  Lucene輸出由VINT和字符串組成的字串,VINT表示字串長(zhǎng),字符串緊接其后。
  
  String --> VInt, Chars
  
  索引包含的文件(Per-Index Files)
  這部分介紹每個(gè)索引包含的文件。
  
  Segments文件
   索引中活動(dòng)的段存儲(chǔ)在Segments文件中。每個(gè)索引只能含有一個(gè)這樣的文件,名為"segments".這個(gè)文件依次列出每個(gè)段的名字和每個(gè)段的大小。
  
  Segments --> SegCount, <SegName, SegSize>SegCount
  
  SegCount, SegSize --> UInt32
  
  SegName --> String
  
  SegName表示該segment的名字,同時(shí)作為索引其他文件的前綴。
  
  SegSize是段索引中含有的文檔數(shù)。
  
  Lock文件
  有一些文件用來(lái)表示另一個(gè)進(jìn)程在使用索引。
  
  ·  假如存在"commit.lock"文件,表示有進(jìn)程在寫(xiě)"segments"文件和刪除無(wú)用的段索引文件,或者表示有進(jìn)程在讀"segments"文件和打開(kāi)某些段的文件。在一個(gè)進(jìn)程在讀取"segments"文件段信息后,還沒(méi)來(lái)得及打開(kāi)所有該段的文件前,這個(gè)Lock文件可以防止另一個(gè)進(jìn)程刪除這些文件。
  
  ·  假如存在"index.lock"文件,表示有進(jìn)程在向索引中加入文檔,或者是從索引中刪除文檔。這個(gè)文件防止很多文件同時(shí)修改一個(gè)索引。
  
  Deleteable文件
  名為"deletetable"的文件包含了索引不再使用的文件的名字,這些文件可能并沒(méi)有被實(shí)際的刪除。這種情況只存在與Win32平臺(tái)下,因?yàn)閃in32下文件仍打開(kāi)時(shí)并不能刪除。
  
  Deleteable --> DelableCount, <DelableName>DelableCount
  
  DelableCount --> UInt32
  
  DelableName --> String
  
  段包含的文件(Per-Segment Files)
  剩下的文件是每段中包含的文件,因此由后綴來(lái)區(qū)分。
  
  域(Field)
  
  域集合信息(Field Info)
  
  所有域名都存儲(chǔ)在這個(gè)文件的域集合信息中,這個(gè)文件以后綴.fnm結(jié)尾。
  
  FieldInfos (.fnm) --> FieldsCount, <FieldName, FieldBits>FieldsCount
  
  FieldsCount --> VInt
  
  FieldName --> String
  
  FieldBits --> Byte
  
  目前情況下,F(xiàn)ieldBits只有使用低位,對(duì)于已索引的域值為1,對(duì)未索引的域值為0。
  
  文件中的域根據(jù)它們的次序編號(hào)。因此域0是文件中的第一個(gè)域,域1是接下來(lái)的,等等。這個(gè)和文檔號(hào)的編號(hào)方式相同。
  
  域值存儲(chǔ)表(Stored Fields)
  
  域值存儲(chǔ)表使用兩個(gè)文件表示:
  
  1.  域索引(.fdx文件)。
  
  如下,對(duì)于每個(gè)文檔這個(gè)文件包含指向域值的指針:
  
  FieldIndex (.fdx) --> <FieldvaluesPosition>SegSize
  
  FieldvaluesPosition --> Uint64
  
  FieldvaluesPosition指示的是某一文檔的某域的域值在域值文件中的位置。因?yàn)橛蛑滴募卸ㄩL(zhǎng)的數(shù)據(jù)信息,因而很輕易隨機(jī)訪問(wèn)。在域值文件中,文檔n的域值信息就存在n*8

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 贡嘎县| 丹棱县| 潮安县| 宣化县| 林甸县| 福鼎市| 得荣县| 陈巴尔虎旗| 黄梅县| 东乡族自治县| 五原县| 蒙城县| 炉霍县| 平顺县| 镇赉县| 临西县| 谢通门县| 察哈| 肥乡县| 县级市| 丘北县| 株洲市| 广灵县| 辽阳市| 西乡县| 泰宁县| 毕节市| 应用必备| 浦县| 策勒县| 玉田县| 巴林右旗| 沂水县| 灵璧县| 濉溪县| 手游| 武川县| 临颍县| 奈曼旗| 灯塔市| 庄河市|