-
Index
Index就是索引庫(相當(dāng)于書的目錄)赘艳,文檔的集合組成索引丁稀,和一般的數(shù)據(jù)庫不一樣,Lucene不支持主鍵话原。在lucene中并不存在一個(gè)叫做Index的類夕吻。
創(chuàng)建索引的時(shí)候用IndexWriter,搜索的時(shí)候用IndexReader
索引庫在物理形式上一般是位于一個(gè)路徑下的一系列文件繁仁。
- Analyzer
分析器涉馅,一段有意義的文字需要通過Analyzer來分割成一個(gè)個(gè)詞語后才能按關(guān)鍵詞搜索。StandartdAnalyzer是Lucene中常用的分析器黄虱,對于中文分詞有CJKAnalyzer稚矿、SmartChinieseAnalyzer等。
- Token
Analyzer返回的結(jié)果就是一串Token。Token包含一個(gè)代表詞本身含義的字符串(也就是詞本身嘛)和該詞在文章中相應(yīng)的起止偏移位置晤揣,Token還包含一個(gè)用來存儲詞類型的字符串桥爽。
-
Document
一個(gè)Document代表索引庫中的一條記錄(書目錄中的其中一個(gè)條目),也叫做文檔昧识。要搜索的信息封裝成Document后通過IndexWriter寫入索引庫钠四。調(diào)用Searcher接口按關(guān)鍵詞搜索后,返回的也是一個(gè)封裝后的Document列表跪楞。在Lucene6.1.0
文檔中對
Document
的描述如下:
Documents are the unit of indexing and search. A Document is a set of fields. Each field has a name and a textual value. A field may be stored with the document, in which case it is returned with search hits on the document. Thus each document should typically contain one or more stored fields which uniquely identify it.
Note that fields which are not stored are not available in documents retrieved from the index.
簡單的翻譯如下:
文檔是建立索引和搜索的基本單位形导,一個(gè)文檔由一系列的filed組成,每個(gè)field有一個(gè)名稱和一個(gè)值(鍵值對)习霹,一個(gè)field可以隨文檔一起存儲朵耕,在搜索時(shí)候隨著Document一起被返回。因此淋叶,每個(gè)Document都應(yīng)該由一個(gè)或者多個(gè)能夠唯一標(biāo)識它的field組成阎曹。值得注意的是,沒有被存儲的field在檢索的時(shí)候是不會被返回的煞檩。
怪不得每次創(chuàng)建Field的時(shí)候处嫌,都會有個(gè)Field.Store.YES,如下:
Field pathField = new StringField("path", file.toString(), Field.Store.YES);
- Field
一個(gè)Document可以包含多個(gè)列斟湃,叫做Field熏迹。例如一篇文章可以包含“標(biāo)題”、“正文”凝赛、“修改時(shí)間”等Field注暗。創(chuàng)建這些列對象后,可以通過Document的add方法增加這些列墓猎。如:
Document doc = new Document();
Field pathField = new StringField("path", file.toString(), Field.Store.YES);
doc.add(pathField);
和一般的數(shù)據(jù)庫不一樣捆昏,一個(gè)文檔的一個(gè)列可以有多個(gè)值。例如一篇文檔即可以屬于互聯(lián)網(wǎng)類毙沾,有可以屬于科技類骗卜。
- Term
Term是搜索語法的最小單位,復(fù)雜的搜索語句會分解成一個(gè)Term查詢左胞。它表示文檔的一個(gè)詞語寇仓,Term由兩部分組成:它表示的詞語和這個(gè)詞語所出現(xiàn)的Field。
Note: Lucene中的API相對數(shù)據(jù)庫來說比較靈活烤宙,沒有類似數(shù)據(jù)庫先定義表結(jié)構(gòu)后使用的過程遍烦。如果前后兩次寫索引時(shí)定義的列名稱不一樣,Lucene會自動(dòng)創(chuàng)建新的列门烂,所以Field的一致性需要我們自己掌握乳愉。