麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 13:16:22
字體:
來源:轉載
供稿:網友

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: vidz 98hd| 黄色网址在线视频 | 国产精品视频导航 | 欧美视频一二区 | 成年人在线视频观看 | 久久久国产视频 | h色在线观看 | 天使萌一区二区三区免费观看 | 欧美成人精品一区二区男人小说 | 黄色网址在线视频 | 久久国产综合精品 | 日韩视频观看 | 色综合精品 | 综合网天天色 | 亚洲 综合 欧美 动漫 丝袜图 | 国产精品剧情一区二区三区 | 欧美三级欧美成人高清www | 日韩毛片网 | 久久精品一二三区白丝高潮 | h色网站免费观看 | 久久草草亚洲蜜桃臀 | 日韩欧美中文字幕视频 | 羞羞网站在线观看入口免费 | av在线高清观看 | 视频一区二区三区在线观看 | 中韩毛片 | 激情综合网俺也去 | www久| 精品亚洲va在线va天堂资源站 | 成人免费观看av | 久久精品欧美一区二区三区不卡 | h视频在线免费看 | 亚洲一级电影在线观看 | 国产亚洲精品久久久久久网站 | 一级黄色欧美 | 国产精品久久久久久久久久久久午夜 | 在线观看视频亚洲 | 成年人小视频在线观看 | 特级毛片免费视频 | 精品视频在线免费看 | 可以免费看av |