譯自http://www.lucenetutorial.com/basic-concepts.html。
基本原理
Lucene是一個java全文檢索引擎庫,方便我們在應用或是網站中加入檢索功能。
Lucene提供全文檢索功能的原理是:將可被檢索的內容加入到全文檢索索引中,並提供對該索引的查詢接口,返回排序後的查詢結果,排序的依據既可以是與查詢語句的相關度,也可以是某一任意字段例如文檔的更新時間。
可被檢索的內容可以有很多種來源,例如SQL/NoSQL數據庫、文件系統,甚至包括網站。
檢索和索引(Searching and Indexing)
Lucene能夠得到快速的檢索響應是因爲索引機制,它並不直接檢索文本,而是對索引進行檢索。這種機制類似於從一本書中根據關鍵字找出相關頁面時,通過書末尾的索引找到,而非對書的每一頁查找關鍵字。
(注:例如在一個書中查找包含關鍵字“北京”的頁,索引機制會利用書後的索引“北京:18,27”得到結果,而非遍歷每一頁找符合條件的頁)
這種索引被稱爲“倒排索引”,因爲它將以頁面爲中心的數據結構(page->words)轉變成了以關鍵字爲中心的數據結構(word->pages)。
文檔(document)
在Lucene中,文檔(Document)是進行查找和索引的單元。
一個索引包含一個或多個文檔。
建立索引(Indexing)主要涉及將document加入到IndexWriter,檢索(Searching)主要涉及利用IndexSearcher從index中抽取document。
Lucene中的document並不一定是通常意義上由英語單詞構成的文檔。比如你給數據庫中的用戶表創建了一個lucene索引,索引中的每個用戶可以被看做是一個Lucene document。
字段(fields)
一個document由多個field構成。一個field簡單來說是一個名值對(name-value)。例如,在應用中常見的一個field是title。對於title字段,名是title,對應的值爲title標題中包含的內容。
Lucene的建立索引涉及創建包含多個field的document,並且將document加入到IndexWriter中。
檢索(Searching)
檢索的前提要求是索引已被創建。檢索包含創建query對象(一般用QueryParser接口),創建IndexSearcher對象,並利用query對象,返回匹配結果。
查詢(Queries)
Lucene有其自己的迷你語言來執行查詢。請到lucene查詢語法閱讀更多。
Lucene查詢語法允許用戶指定哪些field可以被檢索,哪些field需要給定更高的權重,也提供了布爾查詢功能和其他的功能。