lucene创建索引_Lucene概述第一部分:创建索引
lucene創(chuàng)建索引
介紹我最近一直在與開源搜索引擎Lucene合作 。 我不是專家,但是由于我只是瀏覽了一些相當(dāng)稀疏的文檔并將應(yīng)用程序從Lucene的很舊的版本遷移到了最新版本的2.4,所以我在總體上很清楚。 Lucene的文檔有點(diǎn)讓人想像不到,因此我想趁此機(jī)會(huì)在我腦海中嶄露頭角時(shí),對(duì)Lucene進(jìn)行高層次的概述。
如果您發(fā)現(xiàn)此頁面正在尋找Lucene的入門資料,那么對(duì)您有好處! 這就是它的目的。 不要期望找到最佳實(shí)踐,代碼示例或高級(jí)主題。 您將對(duì)Lucene的概念體系結(jié)構(gòu)有一個(gè)清晰的介紹,通過它您可以高效地訪問項(xiàng)目網(wǎng)站上的FAQ和教程。 我正在使用Lucene的Java實(shí)現(xiàn),但是所有這些高級(jí)內(nèi)容都將同樣適用于任何其他Lucene風(fēng)格。
您應(yīng)該了解的第一件事是Lucene的實(shí)際作用。 Lucene實(shí)際上只做兩件事。
索引是您需要進(jìn)行搜索的任何數(shù)據(jù)的有效導(dǎo)航表示。 您的數(shù)據(jù)可能與內(nèi)容管理系統(tǒng)中的一組Word文檔一樣簡單,也可能是來自數(shù)據(jù)庫,HTML頁面或系統(tǒng)中任何類型的數(shù)據(jù)對(duì)象的記錄。 由您決定要使哪些實(shí)體可搜索。 對(duì)于我們的討論,我們假設(shè)我們正在處理一組Word文檔。
創(chuàng)建索引
因此,第一步是為我們的Word文檔集創(chuàng)建索引。 為此,我們需要編寫一些代碼,以從Word文檔中獲取信息并將其轉(zhuǎn)換為可搜索的索引。 唯一的方法就是蠻力。 我們將必須遍歷每個(gè)Word文檔,檢查每個(gè)文檔并將其轉(zhuǎn)換為Lucene創(chuàng)建索引時(shí)需要處理的部分。
Lucene創(chuàng)建索引需要哪些部分? 那里有兩個(gè)。
這兩個(gè)抽象是Lucene的關(guān)鍵,Lucene用兩個(gè)頂級(jí)Java類Document和Field來表示它們。 不要將我們的實(shí)際Word文檔與文檔混淆,它是一個(gè)Java類,表示Lucene中的可搜索項(xiàng)目。 所謂可搜索項(xiàng),是指文檔是您在搜索時(shí)發(fā)現(xiàn)的東西。 創(chuàng)建這些文檔由您決定。
對(duì)于我們來說幸運(yùn)的是,這是從實(shí)際的Word文檔到Lucene文檔的非常清晰的一步。 我想有人會(huì)同意,這將是我們的用戶在進(jìn)行搜索時(shí)希望找到的Word文檔。 這使我們的處理變得相當(dāng)簡單,我們將為每個(gè)實(shí)際的Word文檔簡單地創(chuàng)建一個(gè)Lucene文檔。
創(chuàng)建文檔及其字段
但是我們?cè)撛趺醋瞿?#xff1f; 實(shí)際上很容易。 首先,我們使用new運(yùn)算符創(chuàng)建Document對(duì)象-僅此而已。 但是在這一點(diǎn)上,該文件是沒有意義的。 現(xiàn)在,我們必須確定要添加到文檔中的字段。 這是我們必須思考的部分。 文檔由任意數(shù)量的字段組成,每個(gè)字段都有一個(gè)名稱和一個(gè)值。 這里的所有都是它的。
創(chuàng)建Lucene索引的開發(fā)人員幾乎普遍創(chuàng)建了兩個(gè)字段。 最重要的字段將是“內(nèi)容”字段。 這個(gè)字段保存了我們要為其創(chuàng)建Lucene文檔的Word文檔的內(nèi)容。 請(qǐng)記住,字段的名稱完全是任意的,但是大多數(shù)人將字段之一稱為“內(nèi)容”,并且他們將現(xiàn)實(shí)世界中可搜索對(duì)象(在我們的情況下為Word文檔)的實(shí)際內(nèi)容粘貼到該字段的值中。 本質(zhì)上,字段只是一個(gè)名稱:值對(duì)。
開發(fā)人員創(chuàng)建的另一個(gè)非常常見的字段是“標(biāo)題”字段。 該字段的值將是Word文檔的標(biāo)題。 我們可能希望將有關(guān)Word文檔的其他信息保留在索引中。 其他常見字段是諸如“作者”,“ creation_date”,“關(guān)鍵字”等之類的內(nèi)容。對(duì)所需字段的標(biāo)識(shí)完全取決于業(yè)務(wù)需求。
因此,對(duì)于我們要使其可搜索的每個(gè)Word文檔,我們都必須創(chuàng)建一個(gè)Lucene文檔,其中包含上面概述的字段。 使用這些字段創(chuàng)建文檔后,我們將其添加到Lucene索引編寫器中,并要求它編寫索引。 而已! 現(xiàn)在,我們有了一個(gè)可搜索的索引。 的確如此,但是我們可能已經(jīng)忽略了幾個(gè)Field細(xì)節(jié)。 讓我們仔細(xì)看看Fields。
字段詳細(xì)信息:存儲(chǔ)還是索引?
字段可以以多種方式保留在索引中。 您最初可能懷疑存在的最明顯的方法,也許是唯一的方法是可搜索的方法。 在我們的示例中,我們完全希望,如果用戶鍵入一個(gè)Word文檔內(nèi)容中存在的單詞,則搜索將在搜索結(jié)果中返回該Word文檔。 為此,Lucene必須索引該字段。 首先,該術(shù)語有點(diǎn)讓人困惑,但是請(qǐng)注意,完全有可能在不使其可搜索的情況下將“字段”“存儲(chǔ)”在索引中。 換句話說,可以“存儲(chǔ)”一個(gè)字段,但不能“索引”它。 為什么? 您很快就會(huì)看到。
Lucene在將Field保留在索引中的方式之間的第一個(gè)區(qū)別是存儲(chǔ)還是索引。 如果我們期望某個(gè)字段的值匹配從而導(dǎo)致該文檔被搜索擊中,那么我們必須對(duì)該字段建立索引。 如果僅存儲(chǔ)字段,則搜索查詢無法達(dá)到其值。 為什么要存儲(chǔ)一個(gè)字段? 很簡單,當(dāng)我們通過索引字段之一命中Document時(shí),Lucene將向我們返回整個(gè)Document對(duì)象。 所有存儲(chǔ)的字段將在該Document對(duì)象上可用; 被索引的字段將不在該對(duì)象上。 索引字段是用于查找文檔的信息,存儲(chǔ)的字段是與文檔一起返回的信息。 兩件事。
這意味著盡管我們可能無法基于給定字段的內(nèi)容進(jìn)行搜索,但是當(dāng)搜索返回文檔時(shí),我們?nèi)匀豢梢岳迷撟侄蔚闹怠?我能想到的最明顯的用例是基于Web的文檔的“ url”字段。 搜索aURL的值沒有任何意義,但是您肯定希望知道搜索返回的文檔的URL。 您的結(jié)果頁面還可以如何將用戶引導(dǎo)到點(diǎn)擊頁面? 這是非常重要的一點(diǎn):存儲(chǔ)的字段的值將在搜索返回的文檔上可用,但是實(shí)際上只有索引的字段的值可以用作搜索的目標(biāo)。
從技術(shù)上講,存儲(chǔ)的字段保留在Lucene索引內(nèi)。 但是,我們必須跟蹤索引的字段與存儲(chǔ)的字段不同的事實(shí)。 不幸的術(shù)語。 這就是單詞重要的原因。 它們可以避免很多混亂。
索引字段:已分析還是未分析?
對(duì)于下一個(gè)皺紋,我們必須指出,可以以兩種不同的方式對(duì)索引字段進(jìn)行索引。 首先,我們可以在單個(gè)塊中索引字段的值。 換句話說,我們可能有一個(gè)“電話號(hào)碼”字段。 當(dāng)搜索電話號(hào)碼時(shí),我們需要匹配整個(gè)值或什么都不匹配。 這是很合理的。 因此,對(duì)于像電話號(hào)碼這樣的字段,我們將整個(gè)值A(chǔ)TOMICALLY索引到Lucene索引中。
但是,讓我們考慮一下Word文檔的“內(nèi)容”字段。 我們是否希望用戶必須匹配整個(gè)字段? 當(dāng)然不是。 我們希望將Word文檔的內(nèi)容分解為可搜索的標(biāo)記。 此過程稱為分析。 我們可以從丟棄所有不重要的詞開始,例如“ a”,“ the”,“ and”等。我們可以進(jìn)行許多其他優(yōu)化,但最重要的是,字段的內(nèi)容如“ contents” ”應(yīng)該由Lucene分析。 這將產(chǎn)生目標(biāo)輕量級(jí)索引。 這就是搜索變得有效和強(qiáng)大的方式。
在API中,這歸結(jié)為以下事實(shí):創(chuàng)建字段時(shí),我們必須指定
- 如果建立索引,是否進(jìn)行分析
現(xiàn)在,您應(yīng)該清楚字段的詳細(xì)信息。 重要的是,我們可以存儲(chǔ)和索引給定的字段。 這不是一個(gè)選擇。
創(chuàng)建索引
將所有文檔添加到索引后,我們只需告訴索引編寫者即可創(chuàng)建索引。 從現(xiàn)在開始,我們可以根據(jù)索引的字段搜索任何文檔。 尋找即將到來的條目,以對(duì)在Lucene索引中搜索事物有一個(gè)高層次的概述。
分手筆記
回想一下,我們?cè)f過,假設(shè)目標(biāo)數(shù)據(jù)是一組Word文檔會(huì)更簡單。 現(xiàn)在我們已經(jīng)完成了,請(qǐng)考慮您的目標(biāo)數(shù)據(jù)可以是任何數(shù)據(jù)。 實(shí)際上,搜索的是Lucene文檔。 您可以根據(jù)需要?jiǎng)?chuàng)建任何內(nèi)容。 它們可以并且經(jīng)常來自現(xiàn)實(shí)世界中數(shù)據(jù)對(duì)象的集合。 同樣,將哪些數(shù)據(jù)輸入到您的Lucene文檔中取決于您的業(yè)務(wù)需求。 它可以像Word文檔到Lucene文檔的一對(duì)一映射一樣簡單,或者每個(gè)Lucene文檔可以是各種數(shù)據(jù)庫查詢以及您可能會(huì)發(fā)現(xiàn)的其他內(nèi)容的集合。
索引愉快!
參考: Lucene概述第一部分:由我們的W4G合作伙伴 Chad Davis在zeroInsertionForce博客上創(chuàng)建索引 。
翻譯自: https://www.javacodegeeks.com/2012/04/lucene-overview-part-one-creating-index.html
lucene創(chuàng)建索引
總結(jié)
以上是生活随笔為你收集整理的lucene创建索引_Lucene概述第一部分:创建索引的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 安卓init.rc被修改(安卓init)
- 下一篇: linux深入理解(linux 深入)
