我們簡單的講解一下什麼是
全文檢索
。因此,很容易的我們想到,應該建立乙個關鍵字與檔案的相關對映,下圖很明白的解釋了這種對映如何實現。
在lucene中,就是使用這種「倒排索引」的技術,來實現相關對映。
下面是lucene的資料必出現的一張圖,但也是其精髓的概括。
我們可以看到,lucene的使用主要體現在兩個步驟:
1 建立索引,通過indexwriter對不同的檔案進行索引的建立,並將其儲存在索引相關檔案儲存的位置中。
2 通過索引查尋關鍵字相關文件。
下面針對官網上面給出的乙個例子,進行分析:
1 analyzer analyzer = new首先,我們需要定義乙個詞法分析器。standardanalyzer(version.lucene_current);23
//store the index in memory:
4 directory directory = new
ramdirectory();5//
to store an index on disk, use this instead:6//
directory directory = fsdirectory.open("/tmp/testindex");
7 indexwriterconfig config = new
indexwriterconfig(version.lucene_current, analyzer);
8 indexwriter iwriter = new
indexwriter(directory, config);
9 document doc = new
document();
10 string text = "this is the text to be indexed.";
11 doc.add(new field("fieldname", text, textfield.type_stored));
12iwriter.adddocument(doc);
13iwriter.close();
1415
//now search the index:
16 directoryreader ireader =directoryreader.open(directory);
17 indexsearcher isearcher = new
indexsearcher(ireader);
18//
parse a ****** query that searches for "text":
19 queryparser parser = new queryparser(version.lucene_current, "fieldname", analyzer);
20 query query = parser.parse("text");
21 scoredoc hits = isearcher.search(query, null, 1000).scoredocs;
22 assertequals(1, hits.length);
23//
iterate through the results:
24for (int i = 0; i < hits.length; i++)
28ireader.close();
29 directory.close();
比如一句話,「我愛我們的中國!」,如何對他拆分,扣掉停頓詞「的」,提取關鍵字「我」「我們」「中國」等等。這就要借助的詞法分析器analyzer來實現。這裡面使用的是標準的詞法分析器,如果專門針對漢語,還可以搭配paoding,進行使用。
1 analyzer analyzer = new standardanalyzer(version.lucene_current);引數中的version.lucene_current,代表使用當前的lucene版本,本文環境中也可以寫成version.lucene_40。
第二步,確定索引檔案儲存的位置,lucene提供給我們兩種方式:
1 本地檔案儲存
directory directory = fsdirectory.open("/tmp/testindex");2 記憶體儲存
directory directory = new ramdirectory();可以根據自己的需要進行設定。
第三步,建立indexwriter,進行索引檔案的寫入。
indexwriterconfig config = new這裡的indexwriterconfig,據官方文件介紹,是對indexwriter的配置,其中包含了兩個引數,第乙個是目前的版本,第二個是詞法分析器analyzer。indexwriterconfig(version.lucene_current, analyzer);
indexwriter iwriter = new indexwriter(directory, config);
第四步,內容提取,進行索引的儲存。
document doc = new第一行,申請了乙個document物件,這個類似於資料庫中的表中的一行。document();
string text = "this is the text to be indexed.";
doc.add(
new field("fieldname", text, textfield.type_stored));
iwriter.adddocument(doc);
iwriter.close();
第二行,是我們即將索引的字串。
第三行,把字串儲存起來(因為設定了textfield.type_stored,如果不想儲存,可以使用其他引數,詳情參考官方文件),並儲存「字段」為"fieldname".
第四行,把doc物件加入到索引建立中。
第五行,關閉indexwriter,提交建立內容。
這就是索引建立的過程。
第一步,開啟儲存位置
directoryreader ireader = directoryreader.open(directory);第二步,建立搜尋器
indexsearcher isearcher = new indexsearcher(ireader);第三步,類似sql,進行關鍵字查詢
queryparser parser = new queryparser(version.lucene_current, "fieldname", analyzer);這裡,我們建立了乙個查詢器,並設定其詞法分析器,以及查詢的「字段「為」fieldname「。查詢結果會返回乙個集合,類似sql的resultset,我們可以提取其中儲存的內容。query query = parser.parse("text");
scoredoc hits = isearcher.search(query, null, 1000).scoredocs;
assertequals(1, hits.length);
for (int i = 0; i < hits.length; i++)
關於各種不同的查詢方式,可以參考官方手冊。
第四步,關閉查詢器等。
這是其中最常用的五個檔案:
第乙個,也是最重要的,lucene-core-4.0.0.jar
,其中包括了常用的文件,索引,搜尋,儲存等相關核心**。
第二個,lucene-analyzers-common-4.0.0.jar,這裡面包含了各種語言的詞法分析器,用於對檔案內容進行關鍵字切分,提取。
第三個,lucene-highlighter-4.0.0.jar
,這個jar包主要用於搜尋出的內容高亮顯示。
第四個和第五個,lucene-queryparser-4.0.0.jar
,提供了搜尋相關的**,用於各種搜尋,比如模糊搜尋,範圍搜尋
什麼叫全文檢索 全文檢索概念
全文檢索是指計算機索引程式通過掃瞄文章中的每乙個詞,對每乙個詞建立乙個索引,指明該詞在文章中出現的次數和位置,當使用者查詢時,檢索程式就根據事先建立的索引進行查詢,並將查詢的結果反饋給使用者的檢索方式。這個過程類似於通過字典中的檢索字表查字的過程。全文檢索的方法主要分為按字檢索和按詞檢索兩種。按字檢...
什麼叫全文檢索 全文檢索概念
全文檢索是指計算機索引程式通過掃瞄文章中的每乙個詞,對每乙個詞建立乙個索引,指明該詞在文章中出現的次數和位置,當使用者查詢時,檢索程式就根據事先建立的索引進行查詢,並將查詢的結果反饋給使用者的檢索方式。這個過程類似於通過字典中的檢索字表查字的過程。全文檢索的方法主要分為按字檢索和按詞檢索兩種。按字檢...
MSSQL全文檢索
大家可能都會用 select from tb where field like 關鍵字 但是一旦資料量大使用者多,就會造成查詢過慢,因此ms提供一種犧牲空間來換取時間的解決方案。全文檢索。原文請看 我對自己的實現加了些注釋 use popask 使用這個庫 exec sp fulltext data...