對文檔創建好索引後,就能夠在這些索引上面進行搜索了。搜索引擎首先會對搜索的關鍵詞進行解析,而後再在創建好的索引上面進行查找,最終返回和用戶輸入的關鍵詞相關聯的文檔。 數據庫
爲了對文檔進行索引,Lucene 提供了五個基礎的類,他們分別是 Document, Field, IndexWriter, Analyzer, Directory。下面咱們分別介紹一下這五個類的用途: 函數
Document 搜索引擎
Document 是用來描述文檔的,這裏的文檔能夠指一個 HTML 頁面,一封電子郵件,或者是一個文本文件。一個 Document 對象由多個 Field 對象組成的。能夠把一個 Document 對象想象成數據庫中的一個記錄,而每一個 Field 對象就是記錄的一個字段。 spa
Field 對象
Field 對象是用來描述一個文檔的某個屬性的,好比一封電子郵件的標題和內容能夠用兩個 Field 對象分別描述。 索引
Analyzer 內存
在一個文檔被索引以前,首先須要對文檔內容進行分詞處理,這部分工做就是由 Analyzer 來作的。Analyzer 類是一個抽象類,它有多個實現。針對不一樣的語言和應用須要選擇適合的 Analyzer。Analyzer 把分詞後的內容交給 IndexWriter 來創建索引。 文檔
IndexWriter string
IndexWriter 是 Lucene 用來建立索引的一個核心的類,他的做用是把一個個的 Document 對象加到索引中來。
Directory
這個類表明了 Lucene 的索引的存儲的位置,這是一個抽象類,它目前有兩個實現,第一個是 FSDirectory,它表示一個存儲在文件系統中的索引的位置。第二個是 RAMDirectory,它表示一個存儲在內存當中的索引的位置。
//索引文件的存放位置
string INDEX_FILE_PATH = "C:\\wwwroot\\Test\\" + DateTime.Now.ToString("yyyyMMdd") + "_" + DateTime.Now.Ticks.ToString();
//實例化一個索引器(須要三個參數)
//一、path 索引器的存放路徑
//二、Analyzer 一個分析器
//三、是否在索引目錄下從新建立索引文件,false的話在原有文件上疊加
IndexWriter indexwrite = new IndexWriter(INDEX_FILE_PATH, new StandAnalyzer(), true);
//Document能夠看作是數據庫中一條記錄,field能夠看作爲一個字段
Document doc = new Document();
//向doc容器裏添加一個field,"pkid"爲field的名字,第二個參數爲其值,第三個參數爲是否存儲,第四個參數爲是否索引
doc.Add(new Field("pkid", 「數據1」, Field.Store.YES, Field.Index.UN_TOKENIZED));//存儲該field,不建立索引
doc.Add(new Field("title",「數據2」, Field.Store.YES, Field.Index.UN_TOKENIZED));//存儲該field,不建立索引
doc.Add(new Field("summary", "數據1",Field.Store.YES, Field.Index.UN_TOKENIZED));//存儲該field,建立索引
indexwrite.AddDocument(doc);
indexwrite.Optimize();
indexwrite.Close();//建立索引成功,關閉索引
咱們注意到類 IndexWriter 的構造函數須要三個參數,第一個參數指定了所建立的索引要存放的位置,他能夠是一個 File 對象,也能夠是一個 FSDirectory 對象或者 RAMDirectory 對象。第二個參數指定了 Analyzer 類的一個實現,也就是指定這個索引是用哪一個分詞器對文擋內容進行分詞。第三個參數是一個布爾型的變量,若是爲 true 的話就表明建立一個新的索引,爲 false 的話就表明在原來索引的基礎上進行操做。接着程序遍歷了目錄下面的全部文本文檔,併爲每個文本文檔建立了一個 Document 對象。而後把文本文檔的兩個屬性:路徑和內容加入到了兩個 Field 對象中,接着在把這兩個 Field 對象加入到 Document 對象中,最後把這個文檔用 IndexWriter 類的 add 方法加入到索引中去。這樣咱們便完成了索引的建立。接下來咱們進入在創建好的索引上進行搜索的部分。