Lucene

一、Lucene概述

1、Lucene簡(jiǎn)介
Lucene是apache下的一個(gè)開源的全文檢索引擎工具包。

2、 全文檢索(Full-text Search)

定義

全文檢索就是先“分詞”創(chuàng)建索引,再執(zhí)行搜索的過(guò)程。

分詞:就是將一段文字分成一個(gè)個(gè)單詞
全文檢索就將一段文字分成一個(gè)個(gè)單詞去查詢數(shù)據(jù)!??!

應(yīng)用場(chǎng)景

(1)搜索引擎(了解)
搜索引擎是一個(gè)基于全文檢索、能獨(dú)立運(yùn)行、提供搜索服務(wù)的軟件系統(tǒng)。

(2)電商站內(nèi)搜索(重點(diǎn))
思考:電商網(wǎng)站內(nèi),我們都是通過(guò)輸入關(guān)鍵詞來(lái)搜索商品的。如果我們根據(jù)關(guān)鍵詞,直接查詢數(shù)據(jù)庫(kù),會(huì)有什么后果?
答:我們只能使用模糊搜索,來(lái)進(jìn)行匹配,會(huì)導(dǎo)致很多數(shù)據(jù)匹配不到。所以,我們必須使用全文檢索。

二、Lucene實(shí)現(xiàn)全文檢索的流程


image.png

全文檢索的流程分為兩大部分:索引流程、搜索流程。
索引流程:采集數(shù)據(jù)--->構(gòu)建文檔對(duì)象--->創(chuàng)建索引(將文檔寫入索引庫(kù))。
搜索流程:創(chuàng)建查詢--->執(zhí)行搜索--->渲染搜索結(jié)果。

三、配置步驟說(shuō)明

(1)搭建環(huán)境(先下載Lucene)
1、下載Lucene
Lucene是開發(fā)全文檢索功能的工具包,使用時(shí)從官方網(wǎng)站下載,并解壓。
官方網(wǎng)站:http://lucene.apache.org/
下載地址:http://archive.apache.org/dist/lucene/java/
2、創(chuàng)建項(xiàng)目,導(dǎo)入包
mysql5.1驅(qū)動(dòng)包:mysql-connector-java-5.1.7-bin.jar
核心包:lucene-core-4.10.3.jar
分析器通用包:lucene-analyzers-common-4.10.3.jar
查詢解析器包:lucene-queryparser-4.10.3.jar

(2)創(chuàng)建索引庫(kù)
1.采集數(shù)據(jù)
2.將數(shù)據(jù)轉(zhuǎn)換成Lucene文檔
3.將文檔寫入索引庫(kù),創(chuàng)建索引
(具體代碼不在此寫出)

(3)搜索索引庫(kù)
(具體代碼不在此寫出)

四、分詞

(1) 重要性

分詞是全文檢索的核心。
所謂的分詞,就是將一段文本,根據(jù)一定的規(guī)則,拆分成一個(gè)一個(gè)詞。
Lucene是根據(jù)分析器實(shí)現(xiàn)分詞的。針對(duì)不同的語(yǔ)言提供了不同的分析器。并且提供了一個(gè)通用的標(biāo)準(zhǔn)分析器StandardAnalyzer

(2)Lucene分詞的過(guò)程

分詞的時(shí)候,是以域?yàn)閱挝坏摹2煌挠颍嗷オ?dú)立。
同一個(gè)域中,拆分出來(lái)相同的詞,視為同一個(gè)詞(Term)
不同的域中,拆分出來(lái)相同的詞,不是同一個(gè)詞。
其中,Term是Lucene最小的語(yǔ)匯單元,不可再細(xì)分。
分詞的時(shí)候經(jīng)歷了一系列的過(guò)濾器。如大小寫轉(zhuǎn)換、去除停用詞等。

(3)分詞后索引庫(kù)結(jié)構(gòu)
索引庫(kù)中有兩個(gè)區(qū)域:索引區(qū)、文檔區(qū)。
文檔區(qū)存放的是文檔。Lucene給每一個(gè)文檔自動(dòng)加上一個(gè)文檔編號(hào)docID。
索引區(qū)存放的是索引。注意:
索引是以域?yàn)閱挝坏模煌挠?,彼此相互?dú)立。
索引是根據(jù)分詞規(guī)則創(chuàng)建出來(lái)的,根據(jù)索引就能找到對(duì)應(yīng)的文檔。

五、Field域
(1)三大屬性

1.是否分詞(tokenized)

只有設(shè)置了分詞屬性為true,lucene才會(huì)對(duì)這個(gè)域進(jìn)行分詞處理。
在實(shí)際的開發(fā)中,有一些字段是不需要分詞的,比如商品id,商品圖片等。
而有一些字段是必須分詞的,比如商品名稱,描述信息等。

  1. 是否索引(indexed)

只有設(shè)置了索引屬性為true,lucene才為這個(gè)域的Term詞創(chuàng)建索引。
在實(shí)際的開發(fā)中,有一些字段是不需要?jiǎng)?chuàng)建索引的,比如商品的圖片等。我們只需要對(duì)參與搜索的字段做索引處理。

3.是否存儲(chǔ)(stored)

只有設(shè)置了存儲(chǔ)屬性為true,在查找的時(shí)候,才能從文檔中獲取這個(gè)域的值。
在實(shí)際開發(fā)中,有一些字段是不需要存儲(chǔ)的。比如:商品的描述信息。
因?yàn)樯唐访枋鲂畔?,通常都是大文本?shù)據(jù),讀的時(shí)候會(huì)造成巨大的IO開銷。而描述信息是不需要經(jīng)常查詢的字段,這樣的話就白白浪費(fèi)了cpu的資源了。
因此,像這種不需要經(jīng)常查詢,又是大文本的字段,通常不會(huì)存儲(chǔ)到索引庫(kù)。

(2)特點(diǎn)

三大屬性彼此獨(dú)立。
通常分詞是為了創(chuàng)建索引。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容