日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Lucene 的存儲(chǔ)結(jié)構(gòu)概述

系統(tǒng) 2657 0

lucene 的檢索算法屬于索引檢索,即用空間來(lái)?yè)Q取時(shí)間,對(duì)需要檢索的文件、字符流進(jìn)行全文索引,在檢索的時(shí)候?qū)λ饕M(jìn)行快速的檢索,得到檢索位置,這個(gè)位置記錄檢索詞出現(xiàn)的文件路徑或者某個(gè)關(guān)鍵詞。

lucene 在存儲(chǔ)它的全文索引結(jié)構(gòu)時(shí),是有層次結(jié)構(gòu)的,這涉及到5個(gè)層次:索引(Index);段(Segment);文檔(Document);域(Field);詞(Term),他們的關(guān)系如下圖所示:( lucene 索引存儲(chǔ)結(jié)構(gòu)概念圖)

下圖是 Lucene 生成的索引的一個(gè)實(shí)例,右邊是對(duì)這5個(gè)層次的描述:

?

Lucene 的索引結(jié)構(gòu)是有層次結(jié)構(gòu)的,主要分以下幾個(gè)層次:

  • 索引(Index):
    • 一個(gè)目錄一個(gè)索引,在 Lucene 中一個(gè)索引是放在一個(gè)文件夾中的。
    • 如左圖,同一文件夾中的所有的文件構(gòu)成一個(gè) Lucene 索引。
  • 段(Segment):
    • 一個(gè)索引可以包含多個(gè)段,段與段之間是獨(dú)立的,添加新文檔可以生成新的段,不同的段可以合并。
      在建立索引的時(shí)候?qū)π阅苡绊懽畲蟮牡胤骄褪窃趯⑺饕龑?xiě)入文件的時(shí)候, 所以在具體應(yīng)用的時(shí)候就需要對(duì)此加以控制,段(Segment) 就是實(shí)現(xiàn)這種控制的。稍后詳細(xì)描述段(Segment) 的控制策略。
    • 如上圖,具有相同前綴文件的屬同一個(gè)段,圖中共兩個(gè)段 "_0" 和 "_1"。
    • segments.gen和segments_5是段的元數(shù)據(jù)文件,也即它們保存了段的屬性信息。
  • 文檔(Document):
    • 文檔是我們建索引的基本單位,不同的文檔是保存在不同的段中的,一個(gè)段可以包含多篇文檔。
    • 新添加的文檔是單獨(dú)保存在一個(gè)新生成的段中,隨著段的合并,不同的文檔合并到同一個(gè)段中。
  • 域(Field):
    • 一篇文檔包含不同類型的信息,可以分開(kāi)索引,比如標(biāo)題,時(shí)間,正文,作者等,都可以保存在不同的域里。
    • 不同域的索引方式可以不同。
  • 詞(Term):
    • 詞是索引的最小單位,是經(jīng)過(guò)詞法分析和語(yǔ)言處理后的字符串。

?

Lucene 的索引結(jié)構(gòu)中,即保存了正向信息,也保存了反向信息。

所謂正向信息:

  • 按層次保存了從索引,一直到詞的包含關(guān)系:索引(Index) –> 段(segment) –> 文檔(Document) –> 域(Field) –> 詞(Term)
  • 也即此索引包含了那些段,每個(gè)段包含了那些文檔,每個(gè)文檔包含了那些域,每個(gè)域包含了那些詞。
  • 既然是層次結(jié)構(gòu),則每個(gè)層次都保存了本層次的信息以及下一層次的元信息,也即屬性信息,比如一本介紹中國(guó)地理的書(shū),應(yīng)該首先介紹中國(guó)地理的概況,以及中國(guó)包含多少個(gè)省,每個(gè)省介紹本省的基本概況及包含多少個(gè)市,每個(gè)市介紹本市的基本概況及包含多少個(gè)縣,每個(gè)縣具體介紹每個(gè)縣的具體情況。
  • 如上圖,包含正向信息的文件有:
    • segments_N保存了此索引包含多少個(gè)段,每個(gè)段包含多少篇文檔。
    • XXX.fnm保存了此段包含了多少個(gè)域,每個(gè)域的名稱及索引方式。
    • XXX.fdx,XXX.fdt保存了此段包含的所有文檔,每篇文檔包含了多少域,每個(gè)域保存了那些信息。
    • XXX.tvx,XXX.tvd,XXX.tvf保存了此段包含多少文檔,每篇文檔包含了多少域,每個(gè)域包含了多少詞,每個(gè)詞的字符串,位置等信息。

所謂反向信息:

  • 保存了詞典到倒排表的映射:詞(Term) –> 文檔(Document)
  • 如上圖,包含反向信息的文件有:
    • XXX.tis,XXX.tii保存了詞典(Term Dictionary),也即此段包含的所有的詞按字典順序的排序。
    • XXX.frq保存了倒排表,也即包含每個(gè)詞的文檔ID列表。
    • XXX.prx保存了倒排表中每個(gè)詞在包含此詞的文檔中的位置。

?

段(Segment) 的控制策略

在建立索引的時(shí)候?qū)π阅苡绊懽畲蟮牡胤骄褪窃趯⑺饕龑?xiě)入文件的時(shí)候, 所以在具體應(yīng)用的時(shí)候就需要對(duì)此加以控制:?

Lucene 默認(rèn)情況是每加入10份文檔(Document)就從內(nèi)存往index文件寫(xiě)入并生成一個(gè)段(Segment) ,然后每10個(gè)段(Segment)就合并成一個(gè)段(Segment). 這些控制的變量如下:?

IndexWriter屬性 默認(rèn)值 描述
MergeFactory 10 控制segment合并的頻率和大小
MaxMergeDocs Int32.MaxValue 限制每個(gè)segment中包含的文檔數(shù)
MinMergeDocs 10 當(dāng)內(nèi)存中的文檔達(dá)到多少的時(shí)候再寫(xiě)入segment

MaxMergeDocs用于控制一個(gè)segment文件中最多包含的Document數(shù).比如限制為100的話,即使當(dāng)前有10個(gè)segment也不會(huì)合并,因?yàn)楹喜⒑蟮膕egment將包含1000個(gè)文檔,超過(guò)了限制。

MinMergeDocs用于確定一個(gè)當(dāng)內(nèi)存中文檔達(dá)到多少的時(shí)候才寫(xiě)入文件,該項(xiàng)對(duì)segment的數(shù)量和大小不會(huì)有什么影響,它僅僅影響內(nèi)存的使用,進(jìn)一步影響寫(xiě)索引的效率。

?

參考資料:
第三節(jié) Lucene 索引文件格式分析
http://hi.baidu.com/hustwk/blog/item/133bd2333f867047ad4b5fd0.html

Lucene 學(xué)習(xí)總結(jié)之三: Lucene 的索引文件格式(1)
http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623597.html
Lucene 學(xué)習(xí)總結(jié)之三: Lucene 的索引文件格式(2)
http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623599.html

Lucene 入門與使用
http://blog.csdn.net/mxz391/archive/2007/05/15/1610140.aspx

Lucene 源代碼剖析-4 索引文件結(jié)構(gòu)(1)
http://www.cnblogs.com/eaglet/archive/2009/02/13/1390033.html

開(kāi)放源代碼的全文檢索引擎 Lucene
http://www. lucene .com.cn/about.htm

Lucene :基于Java的全文檢索引擎簡(jiǎn)介
http://www.chedong.com/tech/ lucene .html

Lucene 應(yīng)用架構(gòu)分析
http://book.51cto.com/art/200807/80198.htm

淺談 Lucene 架構(gòu)——開(kāi)源搜索架構(gòu)(二)?
http://swanmsg.blog.sohu.com/112470914.html

lucene .net的索引的建立(三): 建立索引的問(wèn)題
http://tech.ddvip.com/2008-10/122337481074843.html

?

Lucene 的存儲(chǔ)結(jié)構(gòu)概述


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。。?/p>

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 大化| 威宁| 丰县| 宣武区| 成安县| 武隆县| 赤水市| 耿马| 侯马市| 皮山县| 舞阳县| 湖北省| 栾川县| 河间市| 斗六市| 松溪县| 肇东市| 三亚市| 泗阳县| 浦城县| 柳江县| 道真| 伊金霍洛旗| 连江县| 阿拉尔市| 五台县| 浦东新区| 岳阳市| 电白县| 三台县| 汕尾市| 进贤县| 科技| 榆中县| 云南省| 泸溪县| 云和县| 大渡口区| 吉首市| 彩票| 涡阳县|