簡介
Lucene是一個開放源代碼的全文檢索引擎工具包,但它不是一個完整的全文檢索引擎钠右,而是一個全文檢索引擎的架構赋元,提供了完整的查詢引擎和索引引擎。
全文檢索
數(shù)據(jù)總體分為兩種:結構化數(shù)據(jù)和非結構化數(shù)據(jù)飒房。
(1)結構化數(shù)據(jù):指具有固定格式或有限長度的數(shù)據(jù)搁凸,如數(shù)據(jù)庫,元數(shù)據(jù)等狠毯。
(2)非結構化數(shù)據(jù):指不定長或無固定格式的數(shù)據(jù)护糖,如郵件,word文檔等磁盤上的文件
非結構化數(shù)據(jù)查詢方法
(1)順序掃描法(Serial Scanning): 所謂順序掃描完所有的文件嚼松,速度慢嫡良。
(2)全文檢索(Full-text Search):將非結構化數(shù)據(jù)中的一部分信息提取出來,重新組織献酗,使其變得有一定結構寝受,然后對此有一定結構的數(shù)據(jù)進行搜索,從而達到搜索相對較快的目的罕偎。這部分從非結構化數(shù)據(jù)中提取出的然后重新組織的信息很澄,我們稱之索引。
這種先建立索引,再對索引進行搜索的過程就叫全文檢索(Full-text Search)甩苛。
lucene全文檢索流程
創(chuàng)建索引
將用戶要搜索的文檔內容進行索引蹂楣,索引存儲在索引庫(index)中。
原始文檔
原始文檔是指要索引和搜索的內容讯蒲。原始內容包括互聯(lián)網(wǎng)上的網(wǎng)頁痊土、數(shù)據(jù)庫中的數(shù)據(jù)、磁盤上的文件等墨林。
從互聯(lián)網(wǎng)上施戴、數(shù)據(jù)庫、文件系統(tǒng)中等獲取需要搜索的原始信息萌丈,這個過程就是信息采集赞哗,信息采集的目的是為了對原始內容進行索引。在Internet上采集信息的軟件通常稱為爬蟲辆雾,肪笋,爬蟲訪問互聯(lián)網(wǎng)上的每一個網(wǎng)頁,將獲取到的網(wǎng)頁內容存儲起來度迂。
爬蟲開源軟件藤乙,Nutch,jsoup惭墓, heritrix坛梁。
獲取磁盤上文件的內容,可以通過文件流來讀取文本文件的內容腊凶,對于pdf划咐、doc、xls等文件可通過第三方提供的解析工具讀取文件內容钧萍,比如Apache POI讀取doc和xls的文件內容褐缠。
文檔對象
在索引前需要將原始內容創(chuàng)建成文檔(Document),文檔中包括一個一個的域(Field)风瘦,域中存儲內容队魏。
將磁盤上的一個文件當成一個document,Document中包括一些Field万搔,每個Field由name和對應value組成胡桨,那么如file_name文件名稱、file_path文件路徑瞬雹、file_size文件大小昧谊、file_content文件內容等,value則存儲了其實際對應的值挖炬。
(1)每個Document可以有多個Field
(2)不同的Document可以有不同的Field
(3)同一個Document可以有相同的Field(域名和域值都相同)
(4)每個文檔都有一個唯一的編號揽浙,就是文檔id。
分析文檔
將原始內容創(chuàng)建為包含域(Field)的文檔(document)意敛,需要再對域中的內容進行分析馅巷,分析的過程是經(jīng)過對原始文檔提取單詞、將字母轉為小寫草姻、去除標點符號钓猬、去除停用詞等過程生成最終的語匯單元,可以將語匯單元理解為一個一個的單詞撩独,term敞曹。語匯單元
創(chuàng)建索引
對所有文檔分析得出的語匯單元進行索引,索引的目的是為了搜索综膀,最終要實現(xiàn)只搜索被索引的語匯單元從而找到Document(文檔)澳迫。
1)創(chuàng)建索引是對語匯單元索引,通過詞語找文檔剧劝,這種索引的結構叫倒排索引結構橄登。
2)傳統(tǒng)方法是根據(jù)文件找到該文件的內容,在文件內容中匹配搜索關鍵字讥此,這種方法是順序掃描方法拢锹,數(shù)據(jù)量大、搜索慢萄喳。
3)倒排索引結構是根據(jù)內容(詞語)找文檔卒稳,如下圖:
倒排索引結構也叫反向索引結構,包括索引和文檔兩部分他巨,索引即詞匯表充坑,它的規(guī)模較小,而文檔集合較大染突。
查詢語法
1匪傍、基礎的查詢語法,關鍵詞查詢:
域名+“:”+搜索的關鍵字
例如:content:java
2觉痛、范圍查詢
域名+“:”+[最小值 TO 最大值]
例如:size:[1 TO 1000]
范圍查詢在lucene中支持數(shù)值類型役衡,不支持字符串類型。在solr中支持字符串類型薪棒。
3手蝎、組合條件查詢
1)+條件1 +條件2:兩個條件之間是并且的關系and
例如:+filename:apache +content:apache
2)+條件1 條件2:必須滿足第一個條件,應該滿足第二個條件
例如:+filename:apache content:apache
3)條件1 條件2:兩個條件滿足其一即可俐芯。
例如:filename:apache content:apache
4)-條件1 條件2:必須不滿足條件1棵介,要滿足條件2
例如:-filename:apache content:apache
?????? 4、布爾查詢
?????????????? Occur.MUST:必須滿足此條件吧史,相當于and
? ? ?? Occur.SHOULD:應該滿足邮辽,但是不滿足也可以,相當于or
? ???? Occur.MUST_NOT:必須不滿足。相當于not