锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
SimpleFSDirectory:FSDirectory鐨勭畝鍗曞疄鐜?/span>,騫跺彂鑳藉姏鏈夐檺錛岄亣鍒板綰跨▼璇誨悓涓涓枃浠舵椂浼氶亣鍒扮摱棰堬紝閫氬父鐢?/span>NIOFSDirectory鎴?/span>MMapDirectory浠f浛銆?/span>
NIOFSDirectory錛氶氳繃java.nio's FileChannel瀹炶瀹氫綅璇誨彇錛屾敮鎸佸綰跨▼璇伙紙榛樿鎯呭喌涓嬫槸綰跨▼瀹夊叏鐨勶級銆傝綾諱粎浣跨敤FileChannel榪涜璇繪搷浣滐紝鍐欐搷浣滃垯鏄氳繃FSIndexOutput瀹炵幇銆?/span>
娉ㄦ剰錛?/span>NIOFSDirectory 涓嶉傜敤浜?/span>Windows緋葷粺錛屽彟澶栧鏋滀竴涓闂綾葷殑綰跨▼錛屽湪IO闃誨鏃惰interrupt鎴?/span>cancel錛屽皢浼氬鑷村簳灞傜殑鏂囦歡鎻忚堪絎﹁鍏抽棴錛屽悗緇殑綰跨▼鍐嶆璁塊棶NIOFSDirectory鏃跺皢浼氬嚭鐜?/span>ClosedChannelException寮傚父錛屾縐嶆儏鍐靛簲鐢?/span>SimpleFSDirectory浠f浛銆?/span>
MMapDirectory錛氶氳繃鍐呭瓨鏄犲皠榪涜璇伙紝閫氳繃FSIndexOutput榪涜鍐欑殑FSDirectory瀹炵幇綾匯備嬌鐢ㄨ綾繪椂瑕佷繚璇佺敤瓚沖鐨勮櫄鎷熷湴鍧絀洪棿銆傚彟澶栧綋閫氳繃IndexInput鐨?/span>close鏂規硶榪涜鍏抽棴鏃跺茍涓嶄細绔嬪嵆鍏抽棴搴曞眰鐨勬枃浠跺彞鏌勶紝鍙湁GC榪涜璧勬簮鍥炴敹鏃舵墠浼氬叧闂?/span>
涓轟簡鑳介傚簲鍚勪釜鎿嶄綔緋葷粺閫夋嫨鏈浣?/span>Directory鏂規錛?/span>lucene 鎻愪緵FSDirectory綾葷殑闈欐佹柟娉?/span>open()瀹炵幇鑷傚簲銆?/span>
public static FSDirectory open(File path, LockFactory lockFactory) throws IOException {
if ((Constants.WINDOWS || Constants.SUN_OS || Constants.LINUX)
&& Constants.JRE_IS_64BIT && MMapDirectory.UNMAP_SUPPORTED) {
return new MMapDirectory(path, lockFactory);
} else if (Constants.WINDOWS) {
return new SimpleFSDirectory(path, lockFactory);
} else {
return new NIOFSDirectory(path, lockFactory);
}
}
RAMDirectory錛氬父椹誨唴瀛樼殑Directory瀹炵幇鏂瑰紡銆傞粯璁ら氳繃SingleInstanceLockFactory錛堝崟瀹炰緥閿佸伐鍘傦級榪涜閿佺殑瀹炵幇銆?span style="color:red">璇ョ被涓嶉傚悎澶ч噺绱㈠紩鐨勬儏鍐?/span>銆?span style="color:red">鍙﹀涔熶笉閫傜敤浜庡綰跨▼鐨勬儏鍐?/span>銆?/span> 鍦ㄧ儲寮曟暟鎹噺澶х殑鎯呭喌涓嬪緩璁嬌鐢?/span>MMapDirectory浠f浛銆?/span>RAMDirectory鏄?/span>Directory鎶借薄綾誨湪浣跨敤鍐呭瓨鏈涓烘枃浠跺瓨鍌ㄧ殑瀹炵幇綾伙紝鍏朵富瑕佹槸灝嗘墍鏈夌殑绱㈠紩鏂囦歡淇濆瓨鍒板唴瀛樹腑銆傝繖鏍峰彲浠ユ彁楂樻晥鐜囥備絾鏄鏋滅儲寮曟枃浠惰繃澶х殑璇濓紝鍒欎細瀵艱嚧鍐呭瓨涓嶈凍錛屽洜姝わ紝灝忓瀷鐨勭郴緇熸帹鑽愪嬌鐢紝濡傛灉澶у瀷鐨勶紝绱㈠紩鏂囦歡杈懼埌G綰у埆涓婏紝鎺ㄨ崘浣跨敤FSDirectory銆?/span>
NRTCachingDirectory錛氭槸瀵?/span>RAMDirectory鐨勫皝瑁咃紝閫傜敤浜庤繎涔庢椂鏃訛紙near-real-time錛夋搷浣滅殑鐜銆?/span>
FileSwitchDirectory:鏂囦歡鍒囨崲鐨?/span>Directory瀹炵幇.閽堝lucene鐨勪笉鍚岀殑绱㈠紩鏂囦歡浣跨敤涓嶅悓鐨?/span>Directory .鍊熷姪FileSwitchDirectory鏁村悎涓嶅悓鐨?/span>Directory瀹炵幇綾葷殑浼樼偣浜庝竴韜?/span>
姣斿MMapDirectory,鍊熷姪鍐呭瓨鏄犲皠鏂囦歡鏂瑰紡鎻愰珮鎬ц兘錛屼絾鍙堣鍑忓皯鍐呭瓨鍒囨崲鐨勫彲鑳?/span> 錛屽綋绱㈠紩澶ぇ鐨勬椂鍊欙紝鍐呭瓨鏄犲皠涔熼渶瑕佷笉鏂湴鍒囨崲錛岃繖鏍蜂紭鐐逛篃鍙兘鍙樼己鐐癸紝鑰屼箣鍓嶇殑NIOFSDirectory瀹炵幇java NIO鐨勬柟寮忔彁楂橀珮騫跺彂鎬ц兘錛屼絾鍙堝洜楂樺茍鍙戜篃浼氬鑷?/span>IO榪囧鐨勫獎鍝嶏紝鎵浠ヨ繖嬈″彲浠ュ熷姪FileSwitchDirectory鍙戞尌浠栦滑涓ょ殑浼樼偣銆?/span>
RateLimitedDirectoryWrapper:閫氳繃IOContext鏉ラ檺鍒惰鍐欓熺巼鐨?/span>Directory灝佽綾匯?/span>
CompoundFileDirectory錛氱敤浜庤闂竴涓粍鍚堢殑鏁版嵁嫻併備粎閫傜敤浜庤鎿嶄綔銆傚浜庡悓涓孌靛唴鎵╁睍鍚嶄笉鍚屼絾鏂囦歡鍚嶇浉鍚岀殑鎵鏈夋枃浠跺悎騫跺埌涓涓粺涓鐨?/span>.cfs鏂囦歡鍜屼竴涓搴旂殑.cfe鏂囦歡鍐呫?/span>
.cfs鏂囦歡鐢?/span>Header錛?/span>FileData鍜?/span>FileCount緇勬垚銆?/span>.cfe鏂囦歡鐢?/span>Header錛?/span>FileCount,FileName,DataOffset,DataLength緇勬垚銆?/span>.cfs鏂囦歡涓瓨鍌ㄧ潃绱㈠紩鐨勬瑕佷俊鎭強緇勫悎鏂囦歡
鐨勬暟鐩紙FileCount錛夈?/span>.cfe鏂囦歡瀛樺偍鏂囦歡鐩綍鐨勬潯鐩唴瀹癸紝鍐呭涓寘鎷枃浠舵暟鎹墖鍖虹殑璧峰浣嶇疆錛屾枃浠剁殑闀垮害鍙婃枃浠剁殑鍚嶇О銆?/span>
TrackingDirectoryWrapper錛?/span>Directory鐨勪唬鐞嗙被銆傜敤浜庤褰曞摢浜涙枃浠惰鍐欏叆鍜屽垹闄ゃ?/span>
鏂囩珷杞澆榪囨潵鐨勶紒
鍦?/span>2013騫村簳鍏徃鎺ュ埌涓涓」鐩敤鍒?/span>lucene,榪欐槸鎴戠涓嬈℃鐪熸帴瑙?/span>Lucene錛屼唬鐮佹瘮杈冭?/span>3.6鐗堟湰錛屼笉閫傚悎鏂伴」鐩殑闇姹傦紙絀洪棿鏌ヨ錛夈備簬鏄笅杞戒簡鏈鏂扮増鏈?/span> 4.51,鏈夊甫“絀洪棿鏌ヨ”妯″潡銆傚悇澶ф悳绱㈠紩鎿庨兘娌℃湁鎵懼埌鍍忔牱渚嬪瓙錛屼簬鏄兂鍒頒簡lucene svn鐨?/span> trunk鐩綍嫻嬭瘯鐢ㄤ緥涓壘鍒頒簡嫻嬭瘯渚嬪瓙錛屽紑濮嬩簡涓孌?/span>lucene涔嬫梾銆?/span>
鍐欐暟鎹紝鍒涘緩IndexWriter,閫氳繃瀹冪殑鏋勯犲嚱鏁伴渶瑕佷竴涓儲寮曠洰褰曪紙Diectory錛夊拰绱㈠紩鍐欏叆閰嶇疆欏癸紙InderWriterConfig錛?/span>,鐩存帴涓婁唬鐮侊細
//璁劇疆鍐欏叆鐩綍(濂藉嚑縐嶅懙鍛?/span>)
Directory d=FSDirectory.open(new File("D:/luceneTest"));
//璁劇疆鍒嗚瘝 StandardAnalyzer錛堜細鎶婂彞瀛愪腑鐨勫瓧鍗曚釜鍒嗚瘝錛?/span>
Analyzer analyzer= new StandardAnalyzer(Version.LUCENE_45);
//璁劇疆绱㈠紩鍐欏叆閰嶇疆
IndexWriterConfig config=new IndexWriterConfig(Version.LUCENE_45,analyzer);
//璁劇疆鍒涘緩妯″紡
//config.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND);
IndexWriter indexwriter= new IndexWriter(d,config);
涓婇潰鍥涜浠g爜灝卞垱寤哄ソ浜?/span>indexwriter錛?/span>涓嬮潰鎶婃暟鎹~鍏ュ氨濂戒簡錛屽啓鍏ユ湁澶氱鏂瑰紡濡備笅鍥撅細
鐢?/span> addDocment 涓句緥浠g爜濡備笅錛?/span>
Document doc=new Document();
doc.add(new StringField("id", "1", Store.YES));
doc.add(new StringField("name", "brockhong", Store.YES));
doc.add(new TextField("content", "lucene 鏂囨。絎竴嬈″啓鐪嬬潃緇欏垎鍚?/span>", Store.YES));
//鍐欏叆鏁版嵁
indexwriter.addDocument(doc);
//鎻愪氦
indexwriter.commit();
鐢?/span> Luke 宸ュ叿鏌ョ湅Text鍒楋紝榪欐槸鏍囧噯鍒嗚瘝鎯圭殑紲稿摝錛佸啓鍏ユ垚鍔熴?/span>
璇繪暟鎹煡璇紝鍒涘緩 IndexSearcher 鏋勯犲嚱鏁拌緗?/span>indexReader 錛岃緭鍏ユ煡璇㈡潯浠訛紝涓婇潰content瀛楁鏁版嵁璁劇疆浜嗗垎璇嶏紝鎵浠ュ繀欏婚氳繃鏌ヨ瑙f瀽綾?/span>QueryParser璁懼畾鍒嗚瘝瀛楁銆佺増鏈佸垎璇嶆ā寮忥紝騫墮氳繃parse鏂規硶寰楀埌鏌ヨ鏉′歡銆備唬鐮佸涓嬶細
//璇繪暟鎹?/span>
//鍒涘緩 indexReader 榪欎釜宸茶繃鏃?/span> IndexReader.open(d)錛岄噷闈㈢殑浠g爜涓鏍峰彲鑳戒負浜嗗吋瀹硅佺増鏈?/span>
IndexReader indexReader = DirectoryReader.open(d);
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
//鏌ヨ 璁劇疆鍒嗚瘝瀛楁
QueryParser queryParser = new QueryParser(Version.LUCENE_45, "content",
new StandardAnalyzer(Version.LUCENE_45));
//or 鍏崇郴 “緇?#8221;銆?#8220;鍒?#8221;
queryParser.setDefaultOperator(QueryParser.OR_OPERATOR);
Query query = queryParser.parse("緇欏垎");
TopDocs results = indexSearcher.search(query, 100);
int numTotalHits = results.totalHits;
System.out.println("鍏?/span> " + numTotalHits + " 瀹屽叏鍖歸厤鐨勬枃妗?/span>");
ScoreDoc[] hits = results.scoreDocs;
for (int i = 0; i < hits.length; i++) {
Document document = indexSearcher.doc(hits[i].doc);
System.out.println("content:" + document.get("content"));
}