[b]5 如何建索引[/b]
5.1 最簡單的能完成索引的**片斷
indexwriter writer = new indexwriter(「/data/index/」, new standardanalyzer(), true);
document doc = new document();
doc.add(new field("title", "lucene introduction", field.store.yes, field.index.tokenized));
doc.add(new field("content", "lucene works well", field.store.yes, field.index.tokenized));
writer.adddocument(doc);
writer.optimize();
writer.close();
下面我們分析一下這段**。
首先我們建立了乙個writer,並指定存放索引的目錄為「/data/index」,使用的分析器為standardanalyzer,第三個引數說明如果已經有索引檔案在索引目錄下,我們將覆蓋它們(如果是false不覆蓋,而是追加索引)。
然後我們新建乙個document。
我們向document新增乙個field,名字是「title」,內容是「lucene introduction」,對它進行儲存並索引。
再新增乙個名字是「content」的field,內容是「lucene works well」,也是儲存並索引。
然後我們將這個文件新增到索引中,如果有多個文件,可以重複上面的操作,建立document並新增。
新增完所有document,我們對索引進行優化,優化主要是將多個segment合併到乙個,有利於提高索引速度。
隨後將writer關閉,這點很重要。
建立索引就這麼簡單!當然你可能修改上面的**獲得更具個性化的服務。
5.2 將索引直接寫在記憶體
你需要首先建立乙個ramdirectory,並將其傳給writer,**如下:
directory dir = new ramdirectory();
indexwriter writer = new indexwriter(dir, new standardanalyzer(), true);
document doc = new document();
doc.add(new field("title", "lucene introduction", field.store.yes, field.index.tokenized));
doc.add(new field("content", "lucene works well", field.store.yes, field.index.tokenized));
writer.adddocument(doc);
writer.optimize();
writer.close();
5.3 索引文字檔案
field field = new field("content", new filereader(file));
這裡的file就是該文字檔案。該建構函式實際上是讀去檔案內容,並對其進行索引,但不儲存。
[b]6 如何維護索引[/b]
索引的維護操作都是由indexreader類提供。
6.1 如何刪除索引
lucene提供了兩種從索引中刪除document的方法,一種是
void deletedocument(int docnum);
這種方法是根據document在索引中的編號來刪除,每個document加進索引後都會有個唯一編號,所以根據編號刪除是一種精確刪除,但是這個編號是索引的內部結構,一般我們不會知道某個檔案的編號到底是幾,所以用處不大。另一種是:
void deletedocuments(term term);
這種方法實際上是首先根據引數term執行乙個搜尋操作,然後把搜尋到的結果批量刪除了。我們可以通過這個方法提供乙個嚴格的查詢條件,達到刪除指定document的目的。
下面給出乙個例子:
directory dir = fsdirectory.getdirectory(path, false);
indexreader reader = indexreader.open(dir);
term term = new term(field, key);
reader.deletedocuments(term);
reader.close();
6.2 如何更新索引
lucene並沒有提供專門的索引更新方法,我們需要先將相應的document刪除,然後再將新的document加入索引。例如:
directory dir = fsdirectory.getdirectory(path, false);
indexreader reader = indexreader.open(dir);
term term = new term(「title」, 「lucene introduction」);
reader.deletedocuments(term);
reader.close();
indexwriter writer = new indexwriter(dir, new standardanalyzer(), true);
document doc = new document();
doc.add(new field("title", "lucene introduction", field.store.yes, field.index.tokenized));
doc.add(new field("content", "lucene is funny", field.store.yes, field.index.tokenized));
writer.adddocument(doc);
writer.optimize();
writer.close();
C 入門推薦與介紹
入門推薦 c primer 這本書,簡直相當於一本字典,裡面內容很詳細。c 是c的超集,是在c語言基礎上開發的集物件導向程式設計 泛型程式設計和過程化程式設計於一體的程式語言。c 在c語言的基礎上新增了很多特性,包括 類和物件 繼承 多型 虛函式和rtti 執行階段型別識別 函式過載 引用變數 泛型...
C 介紹與入門學習
c 是c語言的繼承,它既可以進行c語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的物件導向的程式設計。c 擅長物件導向程式設計的同時,還可以進行基於過程的程式設計,因而c 就適應的問題規模而論,大小由之。c 不僅擁有計算機高效執行的實用性特徵,...
C 介紹與入門學習
c 是c語言的繼承,它既可以進行c語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的物件導向的程式設計。c 擅長物件導向程式設計的同時,還可以進行基於過程的程式設計,因而c 就適應的問題規模而論,大小由之。c 不僅擁有計算機高效執行的實用性特徵,...