Lucene學(xué)習(xí)筆記(一)有待完善

項(xiàng)目中用到了Lucene,學(xué)習(xí)過(guò)程中抽空記下筆記,以防備自己的好忘之心。

全文檢索

數(shù)據(jù)分類(lèi)
結(jié)構(gòu)化數(shù)據(jù):具有固定格式或有限長(zhǎng)度的數(shù)據(jù)。比如數(shù)據(jù)庫(kù)中的表。
非結(jié)構(gòu)化的數(shù)據(jù):不定長(zhǎng)度或無(wú)固定格式的數(shù)據(jù)。比如郵件、word文檔、網(wǎng)頁(yè)這一類(lèi)的數(shù)據(jù)。
半結(jié)構(gòu)化數(shù)據(jù):處于結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)之間。比如xml、json數(shù)據(jù)。
像結(jié)構(gòu)化數(shù)據(jù),數(shù)據(jù)庫(kù)我們采用sql語(yǔ)句來(lái)進(jìn)行查詢(xún)。非結(jié)構(gòu)化數(shù)據(jù)一般采用順序掃描和全文檢索來(lái)查詢(xún),那么什么叫順序掃描,就是從第一條一直檢索到最后一條,然后把符合要求的結(jié)果返回回去,可想而知順序掃描不論在資源上還是時(shí)間上都有一個(gè)很大的浪費(fèi)。那么全文檢索有一個(gè)什么樣的過(guò)程呢?
下面我們來(lái)看這個(gè)幅圖,這幅圖在Lucene in action的各個(gè)版本中都有過(guò)出現(xiàn)。下面我們先看這幅圖的左半部分,左半部分是結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu)化數(shù)據(jù)以及半結(jié)構(gòu)化數(shù)據(jù)通過(guò)Lucene來(lái)創(chuàng)建出索引文件,而這幅圖的右半部分是通過(guò)用戶(hù)檢索的關(guān)鍵詞檢索我們的索引庫(kù),然后把結(jié)果返回給用戶(hù),在這幅圖中起到一個(gè)很關(guān)鍵性的就是我們的索引。那么什么叫索引,在回答這個(gè)問(wèn)題之前,讓我們回想一下在我們上小學(xué)或者初中的時(shí)候都用過(guò)新華字典,在新華字典的前面會(huì)有拼音檢索或者部首檢索,我們可以通過(guò)這兩個(gè)功能很快的查到我們要找的單詞處在新華字典的多少頁(yè)。其實(shí)索引和前面的說(shuō)的新華字典是大同小異。

這里寫(xiě)圖片描述

那么我們?cè)賮?lái)看另一幅圖,這幅圖表示Lucene這個(gè)詞源在第一篇文檔中和第三篇文檔中出現(xiàn)過(guò),而Hadoop這個(gè)詞元?jiǎng)t在第三、五、七、八、九篇文檔中出現(xiàn)過(guò)。這幅圖的左部分就相當(dāng)于新華字典的拼音檢索或者部首檢索,而這幅圖的右半部分文檔的鏈表我們統(tǒng)一把它稱(chēng)之為倒排表,對(duì)于這一個(gè)整體的功能,我們把它稱(chēng)之為反向索引。那什么叫反向索引,這種由字符串到文件的映射是文件到字符串映射的反向過(guò)程。
這里寫(xiě)圖片描述

全文檢索,首先我們得先創(chuàng)建索引。創(chuàng)建索引我們把它分為三個(gè)過(guò)程,稱(chēng)之為創(chuàng)建索引的三部曲:需要檢索的數(shù)據(jù)(Document)、分詞技術(shù)(Analyzer)、索引創(chuàng)建(Indexer)。
下面我們看一個(gè) 創(chuàng)建索引事例:
第一部:Document事例數(shù)據(jù):全文檢索事例、Lucene案例開(kāi)發(fā)、Lucene實(shí)時(shí)搜索。
第二部:分詞技術(shù)(這里是標(biāo)準(zhǔn)分詞)全|文|檢|索|事|例、Lucene|案|例|開(kāi)|發(fā)、lucene|實(shí)|時(shí)|搜|素。
我線介紹一下什么叫標(biāo)準(zhǔn)分詞,標(biāo)準(zhǔn)分詞對(duì)中文的分詞技術(shù)就是把一個(gè)個(gè)的中文分成一個(gè)個(gè)獨(dú)立的單詞,而英文會(huì)把它轉(zhuǎn)化成詞根。那么我們看這個(gè)事例的分詞技術(shù),“全文檢索事例”,我們把它轉(zhuǎn)化一個(gè)個(gè)單獨(dú)的單詞、對(duì)于英文,我們把Lucene轉(zhuǎn)化為了小寫(xiě)。
第三部:創(chuàng)建索引文件。
QQ20180531-012822@2x.png

上面這張表中“全文檢索事例”在第一篇文檔中出現(xiàn)過(guò),lucene案例開(kāi)發(fā)和lucene實(shí)時(shí)搜索分別在第二篇文檔和第三篇文檔中出現(xiàn),而Lucene這個(gè)單詞在表中出現(xiàn)兩次,因而我們要對(duì)Lucene這個(gè)單詞進(jìn)行合并,如下圖,而這張表就是我們所說(shuō)的索引。


QQ20180531-012918@2x.png

索引我們已經(jīng)創(chuàng)建好了,下面我們看怎么通過(guò)索引進(jìn)行檢索。
索引檢索我們分為四個(gè)部分,我們稱(chēng)之為索引檢索四部曲:搜索關(guān)鍵字(Keywords)、分詞技術(shù)(Analyzer)、檢索索引(Search)、返回結(jié)果。這里的分詞技術(shù)要盡量和之前創(chuàng)建索引的分詞技術(shù)相同。下面我們?nèi)稳煌ㄟ^(guò)一個(gè)案例來(lái)理解索引檢索的過(guò)程:
第一部:獲取用戶(hù)的搜索關(guān)鍵詞。Lucene案例。
第二部:采用分詞技術(shù)。lucene|案|例,這里的分詞技術(shù)同樣采用標(biāo)準(zhǔn)分詞,因此“Lucene案例”被拆分為三個(gè)部分。
第三部:檢索索引:“l(fā)ucene”在第二篇和第三篇文檔中出現(xiàn),“案”在第二篇文檔中出現(xiàn),“例”在第二篇文檔中出現(xiàn),同時(shí)包含lucene、案、例這三個(gè)詞源的是第二篇文檔,所以將第二篇文檔返回。
第四部:返回結(jié)果:“Lucene案例開(kāi)發(fā)”。


這里寫(xiě)圖片描述

Lucene數(shù)學(xué)模型

文檔是Lucene索引和搜索的原子單位,文檔為包含一個(gè)或多個(gè)域的容器,而域則依次包含“真正的”被搜索內(nèi)容,域值通過(guò)分詞技術(shù)處理,得到多個(gè)詞元。
事例:一篇小說(shuō)信息可以稱(chēng)為一個(gè)文檔;小說(shuō)信息又包含多個(gè)域,比如標(biāo)題,作者、簡(jiǎn)介、最后更新時(shí)間等;對(duì)標(biāo)題這一個(gè)域采用分詞技術(shù),又可以把標(biāo)題分解成功一個(gè)或多個(gè)詞元。也就是文檔分為多個(gè)域,而域我們可以通過(guò)分詞技術(shù)分為一個(gè)或多個(gè)詞元。這里指出真正被搜索的是詞元,那么來(lái)計(jì)算呢詞元在文檔中重要程度呢?
詞元權(quán)重的計(jì)算
Term Frequency(tf):即此Term在此文檔中出現(xiàn)的次數(shù),tf越大,說(shuō)明該詞元越重要。
Document Frequency(df):即此多少文檔包含此Term,df越大,說(shuō)明該詞元越不重要。
我們可以這樣來(lái)理解,一個(gè)技術(shù)人員會(huì)的技術(shù)越多,說(shuō)明其價(jià)值越大,那么一項(xiàng)技術(shù)會(huì)使用人越多,那么這項(xiàng)技術(shù)價(jià)值則越小。通過(guò)以上我們可以知道詞元的權(quán)重與tf和df之間的關(guān)系,詞元的權(quán)重與tf正比,與df成反比。
下面一個(gè)權(quán)重的公式:
$$W_{t,d}=tf_{t,d} \times log(\frac{n}{df_t}) $$
$$W_{t,d}=$$the weight of the term t in document d(詞元t在文檔d中的權(quán)重)
$$tf_{t,d}=$$frequency of term t inn document d(詞元t在文檔d中出現(xiàn)的次數(shù))
$$n=$$total number of documents(索引中文檔的總數(shù))
$$df_t=$$the number of document that conntain term t(有多少篇文檔包含資源t)
在上面我們可以知道一篇文檔可以分為多個(gè)詞元,里面這個(gè)權(quán)重計(jì)算公式,我們又可以把詞元轉(zhuǎn)換成權(quán)重,這樣一篇文檔就可以表示成詞元的權(quán)重。因此我們又可以把文檔表示成權(quán)重的向量。
空間向量模型
在空間向量模型中,分為n個(gè)維度,每一個(gè)維度代表一個(gè)詞元,維度n代表的意思是所有的文檔分成的詞元總數(shù),那么一篇文檔就可以在n維空間中表示成一個(gè)向量,那么我們可能會(huì)問(wèn)一篇文檔不包含term2,那么term2在文檔中權(quán)重回事多少呢,很顯然如果文檔不包含Term2,那么Term2在這篇文檔中的權(quán)重就是零。因此我們就可以把所有的文檔都表示成這個(gè)空間的n維向量,那么我們又該如何基于這個(gè)空間向量進(jìn)行檢索呢?

這里寫(xiě)圖片描述

索引的檢索
對(duì)于用戶(hù)的搜索詞,我們采用同樣的技術(shù),把搜索詞分成n個(gè)詞元,然后依次計(jì)算詞元的權(quán)重,把搜索詞表示在這個(gè)n維向量空間模型中,這樣我們就可以用它與文檔之間的夾角來(lái)表示它們之間的相似度,這里我們選用夾角的余弦值作為相關(guān)性的打分,夾角越小余弦值越大打分越高,相關(guān)性也就越大,對(duì)于這樣的空間向量模型,它不僅僅可以做全文檢索,它還可以有其他的用途,比如說(shuō)在語(yǔ)情領(lǐng)域分析中的語(yǔ)句情感分析,在數(shù)據(jù)挖局領(lǐng)域中的文本聚類(lèi)和文本分類(lèi)算法。
Lucene文件結(jié)構(gòu)
層次結(jié)構(gòu)
索引(Index):一個(gè)索引放在一個(gè)文件加中。
段(Segment):一個(gè)索引中可以有很多段,段與段之間是獨(dú)立的,添加一個(gè)文檔可能產(chǎn)生新段,不同的段可以合并成一個(gè)新段。
文檔(Document):文檔是創(chuàng)建索引的基本單位,不同的文檔保存在不同的段中,一個(gè)段可以包含多個(gè)文檔。
域(Field):一個(gè)文檔包含不同類(lèi)型的信息,可以拆分開(kāi)索引。
詞(Term):詞是索引的最小單位,是經(jīng)過(guò)詞法分析和語(yǔ)言處理后的數(shù)據(jù)。
正向信息:就是按層次保存了索引一直到詞的包含關(guān)系:索引->段->文檔->域->詞
索引中包含了哪些段,每個(gè)段包含了哪些文檔,每一篇文檔包含了哪些域,每個(gè)域又包含了哪些詞。
反向信息:反向信息保存了詞典的倒排表映射:詞->文檔。

本文章著作版權(quán)所屬:微笑面對(duì),請(qǐng)關(guān)注我的CSDN博客:博客地址

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文鏈接Lucene學(xué)習(xí)總結(jié)之三:Lucene的索引文件格式(1)、Lucene的索引文件格式(2)、Lucene...
    囧雪啥都不知道閱讀 2,067評(píng)論 8 10
  • 目錄結(jié)構(gòu):1.全文檢索 2.Lucene入門(mén)3.Lucene進(jìn)階 全文檢索 一, 生活中的搜索:1.Win...
    CoderZS閱讀 1,798評(píng)論 0 12
  • 明誠(chéng)的傷勢(shì)反復(fù)不定,到了晚上的時(shí)候,明樓有些不放心便跑去明誠(chéng)的房間去看看他。 剛一進(jìn)房間,就見(jiàn)到明誠(chéng)雙眼緊閉,眉頭...
    空谷飄零閱讀 25,853評(píng)論 1 13
  • 也許春季賽開(kāi)始以來(lái),這個(gè)由皇族傳承下來(lái)的戰(zhàn)隊(duì)并沒(méi)有表現(xiàn)出太過(guò)亮眼的戰(zhàn)績(jī),但他們憑借著Mata強(qiáng)健的大腦,一步...
    翎毒閱讀 389評(píng)論 0 1
  • 姐姐打來(lái)電話說(shuō),一起吃火鍋吧,人多熱鬧。彼時(shí)我正在熬著牛軋?zhí)堑奶菨{,我說(shuō),不了不了,還有工作要做,下次我們?cè)?..
    賣(mài)小妞的餅干閱讀 96評(píng)論 0 0

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