鍍金池/ 教程/ 大數(shù)據(jù)/ Lucene更新文檔操作
Lucene TermRangeQuery類
Lucene排序
Lucene Query類
Lucene搜索操作
Lucene TokenStream
Lucene IndexWriter類
Lucene Term類
Lucene Token
Lucene索引操作
Lucene Field選項(xiàng)
Lucene BooleanQuery類
Lucene StandardAnalyzer類
Lucene字段
Lucene添加文檔操作
Lucene環(huán)境設(shè)置
Lucene Searching類
Lucene StopAnalyzer類
Lucene第一個(gè)應(yīng)用程序
Lucene MatchAllDocsQuery類
Lucene IndexSearcher類
Lucene索引類
Lucene更新文檔操作
Lucene教程
Lucene PrefixQuery類
Lucene Analyzer類
Lucene TopDocs類
Lucene TermQuery類
Lucene文檔
Lucene查詢編程
Lucene WildcardQuery類
Lucene WhitespaceAnalyzer
Lucene SimpleAnalyzer類
Lucene目錄
Lucene刪除文檔操作
Lucene索引過(guò)程
Lucene FuzzyQuery類
Lucene PhraseQuery類
Lucene分析

Lucene更新文檔操作

更新文檔是另一個(gè)重要的操作,它是索引處理的一部分。此操作用于當(dāng)已經(jīng)索引內(nèi)容被更新和索引變?yōu)闊o(wú)效。該操作也被稱為重新編制索引。

我們更新文檔包含IndexWriter字段,IndexWriter用于更新索引。

現(xiàn)在,我們將展示一個(gè)循序漸進(jìn)的過(guò)程,以得到更新文檔的理解,開(kāi)始使用一個(gè)基本的例子。

更新文件的索引

  • 創(chuàng)建更新從更新的文本文件 Lucene 文檔的方法

private void updateDocument(File file) throws IOException{
   Document document = new Document();

   //update indexes for file contents
   writer.updateDocument(new Term 
      (LuceneConstants.CONTENTS, 
      new FileReader(file)),document); 
   writer.close();
}   

創(chuàng)建IndexWriter

  • IndexWriter類作為它在索引過(guò)程中創(chuàng)建/更新索引的核心組成部分

  • 創(chuàng)建 IndexWriter 對(duì)象

  • 創(chuàng)建其應(yīng)指向位置,其中索引是存儲(chǔ)一個(gè)lucene的目錄

  • 初始化索引目錄,有標(biāo)準(zhǔn)的分析版本信息和其他所需/可選參數(shù)創(chuàng)建的 IndexWricrter 對(duì)象

private IndexWriter writer;

public Indexer(String indexDirectoryPath) throws IOException{
   //this directory will contain the indexes
   Directory indexDirectory = 
      FSDirectory.open(new File(indexDirectoryPath));
   //create the indexer
   writer = new IndexWriter(indexDirectory, 
      new StandardAnalyzer(Version.LUCENE_36),true,
      IndexWriter.MaxFieldLength.UNLIMITED);
}

更新文檔并開(kāi)始重建索引過(guò)程

下面的兩個(gè)是方式更新文檔。

  • updateDocument(Term, Document) - 刪除包含該詞條的文檔,并添加使用默認(rèn)的分析文檔(在創(chuàng)建索引時(shí),指定寫入器)

  • updateDocument(Term, Document,Analyzer) - 刪除包含該詞條的文檔,并使用提供的分析儀中添加的文件。

private void indexFile(File file) throws IOException{
   System.out.println("Updating index for "+file.getCanonicalPath());
   updateDocument(file);   
}

應(yīng)用程序示例

讓我們創(chuàng)建一個(gè)測(cè)試Lucene的應(yīng)用程序來(lái)測(cè)試索引處理

步驟 描述
1 創(chuàng)建一個(gè)LuceneFirstApplication在包packagecom.yiibai.lucene下。也可以使用EJB創(chuàng)建的項(xiàng)目
2 創(chuàng)建LuceneConstants.java,TextFileFilter.java和Indexer.java。保持其它的文件不變。
3 創(chuàng)建 LuceneTester.java 如下所述
4 清理和構(gòu)建應(yīng)用程序,以確保按要求處理業(yè)務(wù)邏輯

LuceneConstants.java

這個(gè)類是用來(lái)提供可應(yīng)用于示例應(yīng)用程序中使用的各種常量。

package com.yiibai.lucene;

public class LuceneConstants {
   public static final String CONTENTS="contents";
   public static final String FILE_NAME="filename";
   public static final String FILE_PATH="filepath";
   public static final int MAX_SEARCH = 10;
}

TextFileFilter.java

此類用于為.txt文件過(guò)濾器

package com.yiibai.lucene;

import java.io.File;
import java.io.FileFilter;

public class TextFileFilter implements FileFilter {

   @Override
   public boolean accept(File pathname) {
      return pathname.getName().toLowerCase().endsWith(".txt");
   }
}

Indexer.java

這個(gè)類是用于索引的原始數(shù)據(jù),這樣我們就可以使用 Lucene 庫(kù),使其可搜索。

package com.yiibai.lucene;

import java.io.File;
import java.io.FileFilter;
import java.io.FileReader;
import java.io.IOException;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.上一篇:Lucene環(huán)境設(shè)置下一篇:Lucene分析