青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Javen-Studio 咖啡小屋

http://javenstudio.org - C++ Java 分布式 搜索引擎
Naven's Research Laboratory - Thinking of Life, Imagination of Future

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  24 隨筆 :: 57 文章 :: 170 評論 :: 4 Trackbacks

4           索引是如何創建的

為了使用Lucene來索引數據,首先你比把它轉換成一個純文本(plain-texttokens的數據流(stream),并通過它創建出Document對象,其包含的Fields成員容納這些文本數據。一旦你準備好些Document對象,你就可以調用IndexWriter類的addDocument(Document)方法來傳遞這些對象到Lucene并寫入索引中。當你做這些的時候,Lucene首先分析(analyzer)這些數據來使得它們更適合索引。詳見《Lucene In Action

    // Store the index on disk
    Directory directory = FSDirectory.getDirectory("/tmp/testindex");
    
// Use standard analyzer
    Analyzer analyzer = new StandardAnalyzer(); 
    
// Create IndexWriter object
    IndexWriter iwriter = new IndexWriter(directory, analyzer, true);
    iwriter.setMaxFieldLength(
25000);
    
// make a new, empty document
    Document doc = new Document();
    File f 
= new File("/tmp/test.txt");
    
// Add the path of the file as a field named "path".  Use a field that is 
    
// indexed (i.e. searchable), but don't tokenize the field into words.
    doc.add(new Field("path", f.getPath(), Field.Store.YES, Field.Index.UN_TOKENIZED));
    String text 
= "This is the text to be indexed.";
    doc.add(
new Field("fieldname", text, Field.Store.YES,      Field.Index.TOKENIZED));
    
// Add the last modified date of the file a field named "modified".  Use 
    
// a field that is indexed (i.e. searchable), but don't tokenize the field
    
// into words.
    doc.add(new Field("modified",
        DateTools.timeToString(f.lastModified(), DateTools.Resolution.MINUTE),
        Field.Store.YES, Field.Index.UN_TOKENIZED));
    
// Add the contents of the file to a field named "contents".  Specify a Reader,
    
// so that the text of the file is tokenized and indexed, but not stored.
    
// Note that FileReader expects the file to be in the system's default encoding.
    
// If that's not the case searching for special characters will fail.
    doc.add(new Field("contents"new FileReader(f)));
    iwriter.addDocument(doc);
    iwriter.optimize();
    iwriter.close();

下面詳細介紹每一個類的處理機制。

4.1       索引創建類IndexWriter

一個IndexWriter對象創建并且維護(maintains) 一條索引.

它的構造函數(constructor)create參數(argument)確定(determines)是否一條新的索引將被創建,或者是否一條已經存在的索引將被打開。需要注意的是你可以使用create=true參數打開一條索引,即使有其他readers也在在使用這條索引。舊的readers將繼續檢索它們已經打開的”point in time”快照(snapshot),并不能看見那些新已創建的索引,直到它們再次打開(re-open)。另外還有一個沒有create參數的構造函數,如果提供的目錄(provided path)中沒有已經存在的索引,它將創建它,否則將打開此存在的索引。

另一方面(in either case),添加文檔使用addDocument()方法,刪除文檔使用removeDocument()方法,而且一篇文檔可以使用updateDocument()方法來更新(僅僅是先執行delete在執行add操作而已)。當完成了添加、刪除、更新文檔,應該需要調用close方法。

這些修改會緩存在內存中(buffered in memory),并且定期地(periodically)刷新到(flushDirectory中(在上述方法的調用期間)。一次flush操作會在如下時候觸發(triggered):當從上一次flush操作后有足夠多緩存的delete操作(參見setMaxBufferedDeleteTerms(int)),或者足夠多已添加的文檔(參見setMaxBufferedDocs(int)),無論哪個更快些(whichever is sooner)。當一次flush發生時,等待的(pendingdeleteadd文檔都會被flush到索引中。一次flush可能觸發一個或更多的片斷合并(segment merges)。

構造函數中的可選參數(optional argumentautoCommit控制(controls)修改對IndexReader實體(instance)讀取相同索引的能見度(visibility)。當設置為false時,修改操作將不可見(visible)直到close()方法被調用后。需要注意的是修改將依然被flushDirectory,就像新文件一樣(as new files),但是卻不會被提交(commit)(沒有新的引用那些新文件的segments_N文件會被寫入(written referencing the new files))直道close()方法被調用。如果在調用close()之前發生了某種嚴重錯誤(something goes terribly wrong)(例如JVM崩潰了),于是索引將反映(reflect)沒有任何修改發生過(none of changes made)(它將保留它開始的狀態(remain in its starting state))。你還可以調用close(),這樣可以關閉那些沒有提交任何修改操作的writers,并且清除所有那些已經flush但是現在不被引用的(unreferenced)索引文件。這個模式(mode)對防止(preventreaders在一個錯誤的時間重新刷新(refresh)非常有用(例如在你完成所有delete操作后,但是在你完成添加操作前的時候)。它還能被用來實現簡單的single-writer的事務語義(transactional semantics)("all or none")。

autoCommit設為true的時候,每次flush也會是一次提交(IndexReader實體將會把每次flush當作一次提交)。這是缺省的設置,目的是為了匹配(match2.2版本之前的行為(behavior)。當以這種模式運行時,當優化(optimize)或者片斷合并(segment merges)正在進行(take place)的時候需要小心地重新刷新(refresh)你的readers,因為這兩個操作會綁定(tie up)可觀的(substantial)磁盤空間。

當一條索引暫時(for a while)將不會有更多的文檔被添加,并且期望(desired)得到最理想(optimal)的檢索性能(performance),于是optimize()方法應該在索引被關閉之前被調用。

打開IndexWriter會為使用的Directory創建一個lock文件。嘗試對相同的Directory打開另一個IndexWriter將會導致(lead to)一個LockObtainFailedException異常。如果一個建立在相同的DirectoryIndexReader對象被用來從這條索引中刪除文檔的時候,這個異常也會被拋出。

專家(Expert):IndexWriter允許指定(specify)一個可選的(optionalIndexDeletionPolicy實現。你可以通過這個控制什么時候優先的提交(prior commit)從索引中被刪除。缺省的策略(policy)是KeepOnlyLastCommitDeletionPolicy類,在一個新的提交完成的時候它會馬上所有的優先提交(prior commit)(這匹配2.2版本之前的行為)。創建你自己的策略能夠允許你明確地(explicitly)保留以前的”point in time”提交(commit)在索引中存在(alive)一段時間。為了讓readers刷新到新的提交,在它們之下沒有被刪除的舊的提交(without having the old commit deleted out from under them)。這對那些不支持“在最后關閉時才刪除”語義(”delete on last close semantics)的文件系統(filesystem)如NFS,而這是Lucene的“point in time”檢索通常所依賴的(normally rely on)。

 

 

 

 

 

 

 

Annotated Lucene 作者:naven 日期:2007-5-1

posted on 2007-05-10 00:07 Javen-Studio 閱讀(1252) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩三级电影在线| 国产欧美精品一区二区色综合| 黄色成人91| 老鸭窝毛片一区二区三区| 久久超碰97中文字幕| 国产亚洲精品久久久久婷婷瑜伽| 久久精品国产精品亚洲| 欧美在线观看日本一区| 亚洲国产精品国自产拍av秋霞| 亚洲国产精品va在线看黑人| 欧美电影在线| 亚洲一区二区伦理| 欧美亚洲在线播放| 亚洲国产高清高潮精品美女| 亚洲人久久久| 国产精品久久久免费| 久久国产精品久久久久久久久久| 久久亚洲不卡| 亚洲深夜福利在线| 久久疯狂做爰流白浆xx| 91久久午夜| 亚洲午夜日本在线观看| 国内视频精品| 一区二区电影免费观看| 国产一区二区三区av电影| 亚洲国产另类精品专区| 国产精品美女在线| 亚洲第一搞黄网站| 国产欧美日韩一区二区三区在线| 美日韩精品视频| 国产精品高潮在线| 欧美好骚综合网| 国产日韩欧美在线一区| 亚洲精品国产系列| 狠狠色丁香婷婷综合| 99国产成+人+综合+亚洲欧美| 影音先锋亚洲精品| 亚洲综合精品一区二区| 亚洲福利视频在线| 午夜欧美视频| 午夜久久tv| 欧美日韩国产一中文字不卡| 另类人畜视频在线| 国产精品一级在线| 亚洲最快最全在线视频| 亚洲国产欧美不卡在线观看| 欧美一区二区三区四区在线观看地址 | 欧美激情日韩| 国产香蕉久久精品综合网| 99riav国产精品| 亚洲激情另类| 久久一区二区精品| 久久美女性网| 国产原创一区二区| 亚洲午夜精品一区二区| 一本色道**综合亚洲精品蜜桃冫 | 欧美精品久久天天躁| 久久综合久久久久88| 国产欧亚日韩视频| 亚洲午夜一区二区三区| 一区二区三区不卡视频在线观看 | 亚洲国产精品va在看黑人| 欧美一级在线视频| 久久精品国产一区二区三| 国产精品视频yy9099| 一区二区三区蜜桃网| 亚洲午夜av在线| 欧美三级电影一区| 一区二区三区欧美亚洲| 亚洲欧美日韩国产一区| 国产精品久久久久久久久久尿| 99视频一区| 欧美一级在线亚洲天堂| 国产欧美韩国高清| 久久成人一区二区| 欧美国产激情二区三区| 亚洲激情亚洲| 欧美日韩美女在线观看| 亚洲图片自拍偷拍| 欧美在线国产精品| 国产一区二区三区最好精华液| 香蕉国产精品偷在线观看不卡| 久久精品国产99精品国产亚洲性色 | 国产精品免费看久久久香蕉| 亚洲一区二区三区在线看| 午夜精品一区二区三区在线视 | 国产精品第一区| 亚洲自拍偷拍视频| 久久久噜噜噜久噜久久| 亚洲激情成人网| 欧美激情视频一区二区三区免费| 日韩小视频在线观看| 午夜欧美视频| 1204国产成人精品视频| 欧美日韩激情小视频| 亚欧成人在线| 亚洲国产成人高清精品| 午夜欧美精品久久久久久久| 伊人春色精品| 欧美三区在线观看| 久久久精品日韩欧美| 亚洲高清不卡在线| 久久av一区二区三区亚洲| 亚洲二区精品| 国产欧美精品在线播放| 免费在线国产精品| 午夜亚洲伦理| 亚洲精品日韩综合观看成人91 | 亚洲高清激情| 国产精品美女一区二区| 免费看亚洲片| 性欧美18~19sex高清播放| 亚洲电影免费在线| 久久精品亚洲乱码伦伦中文 | 国产伦精品一区二区三区免费| 久久久久久午夜| 亚洲性图久久| 亚洲免费观看在线观看| 欧美成人国产va精品日本一级| 亚洲欧美变态国产另类| 91久久国产综合久久91精品网站| 国产欧美日韩另类一区| 欧美日韩一区二区三| 欧美.com| 美女诱惑黄网站一区| 欧美亚洲一区二区在线| 亚洲香蕉在线观看| 夜夜夜精品看看| 91久久国产自产拍夜夜嗨| 免费成人网www| 久久一综合视频| 久久国产精品99国产| 午夜国产一区| 亚洲一区久久久| 亚洲视频在线免费观看| 一区二区三区精品久久久| 亚洲国产女人aaa毛片在线| 激情校园亚洲| 激情欧美日韩| 在线免费观看欧美| 国内外成人免费激情在线视频网站| 国产精品视频久久一区| 国产精品久久久久久久久久妞妞| 欧美视频中文在线看| 欧美视频精品在线观看| 欧美三级午夜理伦三级中文幕| 欧美日韩成人免费| 欧美三级电影一区| 国产精品久久久久久久久久尿| 欧美午夜精品一区| 国产精品成人v| 国产伦精品一区二区| 国产日韩专区在线| 一区二区在线观看视频| 亚洲国产成人porn| 日韩视频免费在线观看| 这里只有视频精品| 欧美一级片久久久久久久| 欧美中文字幕在线观看| 久久综合久久综合这里只有精品| 麻豆成人91精品二区三区| 亚洲第一中文字幕在线观看| 亚洲欧洲一区二区在线播放| 99re8这里有精品热视频免费| 一本大道久久a久久精品综合| 亚洲在线视频免费观看| 久久成人免费日本黄色| 免费成人在线视频网站| 欧美日韩视频在线| 国产日韩欧美一区在线| 亚洲国产精品久久久久婷婷884 | 99精品免费| 欧美在线播放一区| 久久亚洲欧洲| 日韩视频在线永久播放| 欧美一区二区三区视频| 欧美国产精品v| 国产精品一区在线观看| 亚洲激情婷婷| 小辣椒精品导航| 欧美激情va永久在线播放| 一区二区三区.www| 久久天天躁狠狠躁夜夜爽蜜月| 欧美日韩调教| 激情亚洲网站| 亚洲摸下面视频| 欧美激情精品| 午夜精品区一区二区三| 欧美精品xxxxbbbb| 国产亚洲一级| 亚洲一区二区三区欧美| 老司机亚洲精品| 亚洲免费在线视频| 欧美精品激情在线观看| 狠狠色综合播放一区二区| 亚洲免费视频在线观看| 最新日韩在线| 久久欧美中文字幕| 国产亚洲欧美在线| 小黄鸭精品aⅴ导航网站入口|