lucene 6.0 經常使用類與方法

1.目錄

org.apache.lucene.store.Directory數據庫

指定索引所在目錄。apache

org.apache.lucene.store.RAMDirectory緩存

 存放於內存中的目錄。函數

org.apache.lucene.store.RAMDirectory.RAMDirectory(FSDirectory dir, IOContext context)
構造函數。把文件索引載入內存中。this

org.apache.lucene.store.FSDirectoryspa

抽象類,表明磁盤中的目錄。有三個實現類:MMapDirectory、NIOFSDirectory與SimpleFSDirectory。orm

2.文檔

org.apache.lucene.document.Document對象

文檔是索引存儲與搜索的基本單位。排序

org.apache.lucene.document.Document.Document()繼承

默認構造函數。

void org.apache.lucene.document.Document.add(IndexableField field)

向文檔中添加一個字段。

String org.apache.lucene.document.Document.get(String name)

根據field name拿內容。若不存在返回null。

String org.apache.lucene.document.Document.toString()

內容格式爲:Document<字段1信息 字段2信息 ... 字段n信息>。

一個例子爲:Document<stored,indexed,tokenized,omitNorms,indexOptions=DOCS<id:4> stored,indexed,tokenized<content:try everything>>

 

3.字段

org.apache.lucene.document.Field

基類。通常會使用它的多個子類。

org.apache.lucene.document.Field.Store
Field類的內部枚舉類。有enum{YES,NO}兩個值。

3.1 FieldType

org.apache.lucene.document.FieldType
描述一個Field的配置信息,包括是否分詞、是否存儲等。
org.apache.lucene.document.FieldType.FieldType()
默認構造函數。
void org.apache.lucene.document.FieldType.setStored(boolean value)
設置爲true表示要在正向文件.fdx/.fdt中存儲這個域。
void org.apache.lucene.document.FieldType.setTokenized(boolean value)
設置爲true表示對內容按照預先配置的analyzer進行分詞。

3.2 TextField

org.apache.lucene.document.TextField

Field的子類。

org.apache.lucene.document.TextField.TextField(String name, String value, Store store)

構造函數。內部調用setTokenized(true)實現分詞。通常用於文檔正文。

3.3 StringField

org.apache.lucene.document.StringField
Field的子類。
org.apache.lucene.document.StringField.StringField(String name, String value, Store stored)
構造函數。內部調用setTokenized(false)設置不分詞。通常用於國家名、做者名、id等。

3.4數字類型

 org.apache.lucene.document.NumericDocValuesField

存儲long類型。日期與時間也能夠轉換爲數字類型存儲與篩選。

org.apache.lucene.document.DoubleDocValuesField

存儲double類型。

4.建索引

org.apache.lucene.index.IndexWriter

建立並維護索引的類。

org.apache.lucene.index.IndexWriter.IndexWriter(Directory d, IndexWriterConfig conf) 

構造函數。

org.apache.lucene.index.IndexWriterConfig

表明IndexWriter的配置。

org.apache.lucene.index.IndexWriterConfig.IndexWriterConfig(Analyzer analyzer)

構造函數。

4.1 增長文檔

void org.apache.lucene.index.IndexWriter.addDocument(Iterable<? extends IndexableField> doc)

向索引中添加文檔。

4.2 刪除文檔

void org.apache.lucene.index.IndexWriter.deleteDocuments(Term... terms)

刪除指定的文檔。若是隻想刪除單個文檔,務必確保傳入的域值只會匹配到單個文檔,就像數據庫中表的主鍵PrimaryKey那樣。

void org.apache.lucene.index.IndexWriter.deleteDocuments(Query... queries) 

刪除指定的文檔。注意事項同上。

4.3 更新文檔

void org.apache.lucene.index.IndexWriter.updateDocument(Term term, Iterable<? extends IndexableField> doc)

首先刪除與term匹配的全部文檔,而後添加新文檔。這個方法是經過調用deleteDocuments()與addDocument()函數實現的。

4.4 其餘操做

int org.apache.lucene.index.IndexWriter.maxDoc()

返回索引中未刪除+已刪除的文檔數。

int org.apache.lucene.index.IndexWriter.numDocs()

返回索引中未刪除的文檔數。

4.5提交更改與關閉

void org.apache.lucene.index.IndexWriter.commit() 

一些更改會被緩存,如增刪文檔、添加索引。調用此方法當即向索引提交待定的更改。

void org.apache.lucene.index.IndexWriter.close() 
關閉相關的資源並釋放索引的「write lock'」。關閉前會自動提交待定的更改。

5.讀索引

org.apache.lucene.index.IndexReader

抽象類,讀索引。

DirectoryReader org.apache.lucene.index.DirectoryReader.open(Directory directory)

在指定的目錄上打開索引。如 IndexReader reader=DirectoryReader.open(directory);

Document org.apache.lucene.search.IndexSearcher.doc(int docID)

根據id讀doc。

6.搜索

6.1 search執行

org.apache.lucene.search.IndexSearcher

在單索引上搜索。

org.apache.lucene.search.IndexSearcher.IndexSearcher(IndexReader r)

構造函數。

TopDocs org.apache.lucene.search.IndexSearcher.search(Query query, int n)

搜索並返回top n 的文檔。

void org.apache.lucene.search.IndexSearcher.search(Query query, Collector results)

search()的重載函數。

TopFieldDocs org.apache.lucene.search.IndexSearcher.search(Query query, int n,Sort sort) 

search()的重載函數。

6.2 讀結果

6.2.1 TopDocs

org.apache.lucene.search.TopDocs

類,表示搜索的返回結果。

float org.apache.lucene.search.TopDocs.getMaxScore()

結果列表中文檔的最大得分值。

ScoreDoc[] org.apache.lucene.search.TopDocs.scoreDocs

public 字段,它沒有get()方法,直接用。

6.2.2  ScoreDoc

org.apache.lucene.search.ScoreDoc

類。TopDocs內的基本存儲單位。有int doc 與float score兩個字段。

int org.apache.lucene.search.ScoreDoc.doc

這個ScoreDoc的id。而後可根據IndexSearcher.doc(int docID)拿到原始doc。

6.2.3 TopFieldDocs

org.apache.lucene.search.TopFieldDocs

TopDocs的子類,表明IndexSearcher.search(Query, int, Sort).方法的返回結果。

SortField[] org.apache.lucene.search.TopFieldDocs.fields

字段。表明者若干排序依據。

ScoreDoc[] org.apache.lucene.search.TopDocs.scoreDocs

繼承的父類的字段,盛放的實際是FieldDoc。

org.apache.lucene.search.FieldDoc

ScoreDoc的子類。

Object[] org.apache.lucene.search.FieldDoc.fields

字段。從前到後依次盛放着各項排序標準的分數,爲int,float等。

6.1 搜索工做流

IndexSearcher.search()->TopDocs->topdocs.scoreDocs->ScoreDoc[]->docid=ScoreDoc.doc->Document=IndexSearcher.doc(id)

7. Term

org.apache.lucene.index.Term

與field概念相似,只不過field.value爲完整的內容,term.value爲感興趣的切分後的詞。

org.apache.lucene.index.Term.Term(String fld, String text)
構造函數。如Term term=new Term("field","content");
「this」、「,」之類的停用詞通常會被收錄進索引中,但在搜索的時候被過濾掉。

8.Analyzer 

對域值分析並生成token,可通俗地理解爲分詞器。

9.Query 

查詢類,抽象類

9.1 TermQuery

TermQuery 最簡單、最基本的Query,用來查詢不切分的單詞。依靠Term類初始化

如Query query=new TermQuery(term);

 

9.2 QueryParser

org.apache.lucene.queryparser.classic.QueryParser

 

此類用於將lucene查詢表達式轉換爲內置的查詢類型。

org.apache.lucene.queryparser.classic.QueryParser.QueryParser(String fieldName, Analyzer a)

構造函數。

Query org.apache.lucene.queryparser.classic.QueryParserBase.parse(String query)

獲得Query對象。

10.Collector

編寫自定義的Colletor,能夠對搜索返回的文檔實現更精確的控制。

相關文章
相關標籤/搜索