成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

搜索那點事兒:Lucene 文件存儲和讀取技術詳解

大數據
Lucene是一個高性能、可伸縮的信息搜索(IR)庫。它可以為你的應用程序添加索引和搜索能力。Lucene是用Java實現的、成熟的開源項目,是著名的Apache Jakarta大家庭的一員,并且基于Apache軟件許可。

[[203641]]

Lucene是一個高性能、可伸縮的信息搜索(IR)庫。它可以為你的應用程序添加索引和搜索能力。Lucene是用Java實現的、成熟的開源項目,是著名的Apache Jakarta大家庭的一員,并且基于Apache軟件許可。

Lucene的檢索算法屬于索引檢索,即用空間來換取時間,對需要檢索的文件、字符流進行全文索引,在檢索的時候對索引進行快速的檢索,得到檢索位置,這個位置記錄檢索詞出現的文件路徑或者某個關鍵詞。Lucene的索引是用文件存儲,Lucene中的文件操作都是通過Directory來實現,下面來介紹一下Lucene有關文件存儲和讀取的有關技術。

1 數據存儲類Directory(org.apache.lucene.store.Directory)

一個Directory對象是一系列統一的文件列表(a flat list of files)。文件可以在它們被創建的時候一次寫入,一旦文件被創建,它再次打開后只能用于讀取(read)或者刪除(delete)操作,并且同時在讀取和寫入的時候允許隨機訪問(random access)。

在這里并不直接使用Java I/O API,但是更確切地說,所有I/O操作都是通過這個API處理的。這使得讀寫操作方式更統一,如基于內存的索引(RAM-based indices)的實現(即RAMDirectory)、通過JDBC存儲在數據庫中的索引、將一個索引存儲為一個文件的實現(即FSDirectory)。

Directory的鎖機制是一個LockFactory的實例實現的,可以通過調用Directory實例的setLockFactory()方法來更改。

如下圖是org.apache.lucene.store.Directory類以及它的一些子類的類圖:

(1) org.apache.lucene.store.FSDirectory

FSDirectory類直接實現Directory抽象類為一個包含文件的目錄。目錄鎖的實現使用缺省的SimpleFSLockFactory,但是可以通過兩種方式修改,即給getLockFactory()傳入一個LockFactory實例,或者通過調用setLockFactory()方法明確制定LockFactory類。

目錄將被緩存(cache)起來,對一個指定的符合規定的路徑(canonical path)來說,同樣的FSDirectory實例通常通過getDirectory()方法返回。這使得同步機制(synchronization)能對目錄起作用。

(2) org.apache.lucene.store.RAMDirectory

RAMDirectory類是一個駐留內存的(memory-resident)Directory抽象類的實現。目錄鎖的實現使用缺省的SingleInstanceLockFactory,但是可以通過setLockFactory()方法修改。

(3) org.apache.lucene.store.MMapDirectory

Lucene和Solr開始在64位的Windows和Solaris系統中默認使用MMapDirectory。簡單說MMapDirectory就是把Lucene的索引當作swap file來處理。mmap()系統調用讓OS把整個索引文件映射到虛擬地址空間,這樣Lucene就會覺得索引在內存中。然后Lucene就可以像訪問一個超大的byte[]數據(在Java中這個數據被封裝在ByteBuffer接口里)一樣訪問磁盤上的索引文件。

Lucene在訪問虛擬空間中的索引時,不需要任何的系統調用,CPU里的MMU和TLB會處理所有的映射工作。如果數據還在磁盤上,那么MMU會發起一個中斷,OS將會把數據加載進文件系統Cache。如果數據已經在cache里了,MMU/TLB會直接把數據映射到內存,這只需要訪問內存,速度很快。

程序員不需要關心paging in/out,所有的這些都交給OS。而且,這種情況下沒有并發的干擾,***的問題就是Java的ByteBuffer封裝后的byte[]稍微慢一些,但是Java里要想用mmap就只能用這個接口。還有一個很大的優點就是所有的內存issue都由OS來負責,這樣沒有GC的問題。因此在64位平臺上的Lucene,盡量使用MMapDirectory。

2 文件讀取類 IndexInput(org.apache.lucene.store.IndexInput)

IndexInput類是一個為了從一個目錄(Directory)中讀取文件的抽象基類,是一個隨機訪問(random-access)的輸入流(input stream),用于所有Lucene讀取Index的操作。BufferedIndexInput是一個實現了帶緩沖的IndexInput的基礎實現。

3 文件寫入類IndexOutput(org.apache.lucene.store.IndexOutput)

IndexOutput類是一個為了寫入文件到一個目錄(Directory)中的抽象基類,是一個隨機訪問(random-access)的輸出流(output stream),用于所有Lucene寫入Index的操作。BufferedIndexOutput是一個實現了帶緩沖的IndexOutput的基礎實現。RAMOuputStream是一個內存駐留(memory-resident)的IndexOutput的實現類。

作為一種檢索系統框架,Lucene并不直接提供系統的實現,而僅僅是系統框架而已。因此,為了構建一個真正可用的全文檢索系統,開發人員必須熟悉Lucene的基本框架以及API,這樣才能進行高效的開發。

這一需求要求了Lucene具備一種簡明、方便的構架與函數接口來方便用戶(即開發人員)的使用。這體現了Lucene需要很高的易用性(usability)。 不僅如此,開源是Lucene的一個重大屬性。相比Google的pagerank搜索方案,Lucene必須不斷改進其算法以及各種輔助措施來使得其運行更加高效,并支持多種語言等。因此,Lucene必須具備很好的可修改性(modifiability)。

【本文為51CTO專欄作者“達觀數據”的原創稿件,轉載可通過51CTO專欄獲取聯系】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2022-05-26 15:30:21

Spring AOP框架

2018-05-17 09:46:40

apachenginx阻塞

2020-01-03 07:57:39

UDPTCP網絡協議

2013-12-26 13:35:39

2013-12-04 09:46:56

Hyper-VNUMA

2011-12-07 13:54:03

筆記本常見問題

2015-12-08 14:49:13

SDN軟件定義網絡

2017-09-12 08:03:29

數據庫MySQL主庫

2011-12-26 11:13:24

密碼

2013-04-09 20:37:56

2013-09-17 10:37:03

AOPAOP教程理解AOP

2022-05-26 09:03:39

AOP編程

2018-03-30 16:03:04

軟件無狀態”

2018-09-26 14:42:48

操作系統Web服務器

2023-12-04 11:02:53

C++空類

2012-03-12 21:23:47

Windows pho

2021-04-13 09:12:45

網絡設備無線路由器交換機

2012-06-21 10:18:43

索引搜索Java

2017-01-09 18:31:53

微信小程序/白熊技術簡

2012-04-17 11:21:50

Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品视频一区二区三区不卡 | av在线免费不卡 | 午夜精品一区二区三区在线观看 | 欧美亚洲视频 | 欧美日韩电影一区二区 | 一区二区三区在线播放 | 国产精品视频一区二区三区四蜜臂 | 欧美久久精品一级黑人c片 91免费在线视频 | 欧美一区二区在线观看视频 | 国产人成在线观看 | 久久91精品 | 一级黄色录像片子 | 国产精彩视频一区 | 国产在线永久免费 | 天天影视色综合 | 成人免费看片又大又黄 | 一级黄色夫妻生活 | 成人av一区二区三区 | 污污免费网站 | 91亚洲国产成人久久精品网站 | 久久国产电影 | 午夜成人免费视频 | 亚洲精品福利在线 | 国产欧美一区二区三区在线看 | 久久精品国产免费看久久精品 | 羞羞视频在线观看网站 | 不卡视频一区二区三区 | 成人久久18免费网站图片 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 日日夜夜精品视频 | 免费一级黄色电影 | 欧美日韩精品一区二区三区四区 | 一级a性色生活片久久毛片 午夜精品在线观看 | 99精品一区二区三区 | 精品国产一区二区三区日日嗨 | 福利片在线 | 91视频在线看 | 日韩在线中文字幕 | 免费一看一级毛片 | 久久伊人精品 | 精品亚洲一区二区三区四区五区 |