天天看點

Lucene-建構和安裝基礎示例程式Lucene-建構和安裝基礎示例程式

Lucene-建構和安裝基礎示例程式

  • 關于本文
  • 關于示例程式
  • 設定CLASSPATH環境變量
  • 使用索引搜尋
  • 關于代碼
  • 核心代碼
  • 索引檔案
  • 搜尋索引

關于本文

本文的目标是通過示例程式幫助你快速入門,了解基本的安裝流程,和配置方法。

關于示例

示例程式示範了Lucene各種功能,以及如何嵌入到你的應用中。

設定CLASSPATH環境變量

首先,你需要下載下傳最新的Lucene釋出包,然後解壓到一個目錄中。

然後你會得到四個JAR包: lucene-core-{version}.jar、 lucene-queryparser-{version}.jar、 lucene-analyzers-common-{version}.jar、 lucene-demo-{version}.jar,把四個JAR包放入到CLASSPATH中。

使用索引搜尋

假設你已經正确配置了CLASSPATH環境變量,接着為檔案建立索引。

java org.apache.lucene.demo.IndexFiles -docs {path-to-lucene}
           

上面的指令生成一個叫index的子目錄,裡面包含了生成了所有Lucene源代碼的索引。

建立完索引之後,通過下面的指令來使用索引搜尋:

java org.apache.lucene.demo.SearchFiles
           

嘗試搜尋supercalifragilisticexpialidocious,你将會得到無結果,因為Lucene源代碼中沒有這個詞。換一個詞,如string,再試一次。然後得到了很多結果,每頁十條傳回,當然你也可以根據需要要求傳回更多的結果。

關于代碼

本文深入到指令行的背後–源代碼,告訴你核心代碼有哪些,在哪裡,以及功能是什麼,目的是為了使你知道如何在自己應用程式中內建Lucene。

核心代碼

  • IndexFiles.java:用于建立一個索引檔案
  • SearchFiles.java:用于搜尋索引檔案

索引檔案

上面說到IndexFiles類用于建立索引檔案,下面來看看它是如何做的。

IndexFiles的執行流程:

main()方法解析指令行參數,然後初始化IndexWriter,打開一個Directory,再初始化StandardAnalyzer和IndexWriterConfig。

IndexFiles的指令行參數:

  • -index:指定了一個存儲索引檔案的目錄路徑,如果沒有指定-index參數的值,則預設使用相對路徑index,如果目前目錄不存在,則建立一個。在某些平台上,預設index目錄可能是在一個不同的目錄中建立的,如使用者目錄。
  • -docs:指定要建立索引為的文檔路徑。
  • -update:訓示IndexFiles不要删除那些已經存在的索引檔案,如果沒有這個參數,那麼IndexFiles在建立索引之前首先清空索引檔案。

IndexWriter使用Directory存儲索引資訊,Directory是一個抽象概念,并不一定是指檔案系統上的一個目錄,也可以是RAM或資料庫等。在示例程式中用到的是FSDirectory,它存儲的目的地是檔案系統。

Analyzer是一個處理通道,通過把輸入文本打散成一個個的單詞,然後再在單詞上做進一步的處理,如小寫轉換、同義詞插入、過濾等操作。在示例程式中,使用的是StandardAnalyzer,它使用Unicode文本分隔算法(該算法定義在 Unicode Standard Annex #29中),然後轉換成小寫,并過濾停止詞。Lucene隻提供少數幾種語言的分析器,定義在lucene/analysis/common/src/java/org/apache/lucene/analysis下。

IndexWriterConfig封裝了IndexWriter的所有配置。

當IndexWriter初始化之後,接着調用indexDocs()方法來遞歸建立Document對象,然後再由IndexWriter序列化到檔案中。Document對象是一個簡單的資料對象,表示一個索引檔案。如果使用了-update指令行參數,IndexWriterConifg的OpenMode将會被設定為OpenMode.CREATE_OR_APPEND,進而IndexWriter嘗試根據辨別符查找是否存在舊的索引檔案,如果存在,則更新;如果不存在,則建立。

搜尋索引

SearchFile類由三個元件組成:IndexSearcher、StandardAnalyzer和QueryParser。搜尋用到的分詞器與建立索引時适用的分詞器必須是同一個,才能保證結果正确。QueryParser分析搜尋詞,産生一個查詢對象Query,然後再傳遞給IndexSearcher進行搜尋。

調用SearchFile的search(query,n)方法進行搜尋,命中文檔将按照分數從高到低排序,然後傳回最高的前幾文檔。

知識鍊

Lucene-大綱

參考

Lucene 7.4.0 demo API

繼續閱讀