Lucene 學(xué)習(xí)第一天
Lucene提供的服務(wù)實際包含兩部分:
1) 寫入:將你提供的源寫入索引或者將其從索引中刪除
寫入流程:
(1)源字符串首先經(jīng)過analyzer處理,分成一個個單詞,去除可選(stopword)
(2)將源中需要的信息加入Document的各個field中,并把需要索引的field索引起來,把需要存儲的
field存儲起來
(3)將索引寫入存儲器,存儲器可以是內(nèi)存或者磁盤
2) 讀出:向用戶提供全文搜索服務(wù),讓用戶通過關(guān)鍵字定位源
讀出流程:
(1)用戶提供搜索關(guān)鍵詞,經(jīng)過analyzer處理
(2)對處理后的關(guān)鍵字搜索索引找出對應(yīng)的Document
(3)用戶根據(jù)需要從找到的Docement中提取需要的Field
概念:
Analyzer :分析器:把一個字符串按照某種規(guī)則劃分成一個個的詞語,并去除其中的無效詞語.
Document :用戶提供的源是一條條記錄,它們可以是文本文件、字符串或者數(shù)據(jù)庫表的一條記錄等等。
一條記錄經(jīng)過索引后,就是以 一個Document的形式存儲在索引文件中。用戶進行搜索也
是以Document列表的形式返回。
field : 一個Docuement可以包含多個信息域,這些信息域就是通過Field在Document中存儲的。它
有兩個屬性可以選擇:存儲和索引。
term : 搜索的最小單位,表示文檔的一個詞語,由兩部分組成:它表示的詞語和這個詞語出現(xiàn)的
field
tocken : 是term的第一次出現(xiàn),它包含term文本和相應(yīng)的起止偏移以及一個類型的字符串
segment : (小文件)添加索引時,document首先寫入不同的小文件然后再合并成一個大索引文件
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();
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();
首先我們創(chuàng)建了一個writer,并指定存放索引的目錄為“/data/index”,使用的分析器為StandardAnalyzer,第三個
參數(shù)說明如果已經(jīng)有索引文件在索引目錄下,我們將覆蓋它們。然后我們新建一個document。
參數(shù)說明如果已經(jīng)有索引文件在索引目錄下,我們將覆蓋它們。然后我們新建一個document。
我們向document添加一個field,名字是“title”,內(nèi)容是“lucene introduction”,對它進行存儲并索引。再添加一個名
字是“content”的field,內(nèi)容是“lucene works well”,也是存儲并索引。然后我們將這個文檔添加到索引中,如果有多個文
檔,可以重復(fù)上面的操作,創(chuàng)建document并添加。
字是“content”的field,內(nèi)容是“lucene works well”,也是存儲并索引。然后我們將這個文檔添加到索引中,如果有多個文
檔,可以重復(fù)上面的操作,創(chuàng)建document并添加。
添加完所有document,我們對索引進行優(yōu)化,優(yōu)化主要是將多個segment合并到一個,有利于提高索引速度。隨后將
writer關(guān)閉,這點很重要。
writer關(guān)閉,這點很重要。
如果你想把純文本文件索引起來,而不想自己將它們讀入字符串創(chuàng)建field,你可以用下面的代碼創(chuàng)建
field: Field field = new Field("content", new FileReader(file));
這里的file就是該文本文件。該構(gòu)造函數(shù)實際上是讀去文件內(nèi)容,并對其進行索引,但不存儲。
posted on 2012-09-19 17:22 Nirvana reborn 閱讀(403) 評論(0) 編輯 收藏 所屬分類: ★搜索引擎