




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Lucene全文檢索第1頁(yè),共47頁(yè)。總體內(nèi)容第一章: lucene簡(jiǎn)介第二章: 入門(mén)實(shí)例第三章: 分析器Analyzer項(xiàng)目實(shí)踐:構(gòu)建一個(gè)簡(jiǎn)單的WEB搜索程序第2頁(yè),共47頁(yè)。第一章:Lucene簡(jiǎn)介搜索引擎的歷史什么是Lucene全文檢索系統(tǒng)的結(jié)構(gòu)為什么使用LuceneLucene倒排索引原理Lucene只關(guān)注文本的索引和搜索Nutch第3頁(yè),共47頁(yè)。搜索引擎的歷史萌芽:Archie、Gopher起步:Robot(網(wǎng)絡(luò)機(jī)器人)的出現(xiàn)與Spider(網(wǎng)絡(luò)爬蟲(chóng))發(fā)展:Excite、Galaxy、Yahoo等繁榮:Infoseek、AltaVista、Google和Baidu 第4頁(yè),共47頁(yè)
2、。什么是Lucene Lucene是非常優(yōu)秀的成熟的開(kāi)源的免費(fèi)的純java語(yǔ)言的全文索引檢索工具包。全文檢索是指計(jì)算機(jī)索引程序通過(guò)掃描文章中的每一個(gè)詞,對(duì)每一個(gè)詞建立一個(gè)索引,指明該詞在文章中出現(xiàn)的次數(shù)和位置,當(dāng)用戶(hù)查詢(xún)時(shí),檢索程序就根據(jù)事先建立的索引進(jìn)行查找,并將查找的結(jié)果反饋給用戶(hù)的檢索方式。 Lucene是一個(gè)高性能、可伸縮的信息搜索(IR)庫(kù)。 Information Retrieval (IR) library.它使你可以為你的應(yīng)用程序添加索引和搜索能力。Lucene的作者Doug Cutting是資深的全文索引/檢索專(zhuān)家,最開(kāi)始發(fā)布在他本人的主頁(yè)上,2001年10月貢獻(xiàn)給APACH
3、E,成為APACHE基金的一個(gè)子項(xiàng)目。 /lucene/ 第5頁(yè),共47頁(yè)。全文檢索系統(tǒng)的結(jié)構(gòu) 第6頁(yè),共47頁(yè)。為什么使用LuceneLucene作為一個(gè)全文檢索引擎,其具有如下突出的優(yōu)點(diǎn):(1)索引文件格式獨(dú)立于應(yīng)用平臺(tái)。Lucene定義了一套以8位字節(jié)為基礎(chǔ)的索引文件格式,使得兼容系統(tǒng)或者不同平臺(tái)的應(yīng)用能夠共享建立的索引文件。(2)在傳統(tǒng)全文檢索引擎的倒排索引的基礎(chǔ)上,實(shí)現(xiàn)了分塊索引,能夠針對(duì)新的文件建立小文件索引,提升索引速度。然后通過(guò)與原有索引的合并,達(dá)到優(yōu)化的目的。(3)優(yōu)秀的面向?qū)ο蟮南到y(tǒng)架構(gòu),使得對(duì)于Lucene擴(kuò)展的學(xué)習(xí)難度降低,方便擴(kuò)充新功能。(4)設(shè)計(jì)了獨(dú)立于語(yǔ)言和文件格
4、式的文本分析接口,索引器通過(guò)接受Token流完成索引文件的創(chuàng)立,用戶(hù)擴(kuò)展新的語(yǔ)言和文件格式,只需要實(shí)現(xiàn)文本分析的接口。(5)已經(jīng)默認(rèn)實(shí)現(xiàn)了一套強(qiáng)大的查詢(xún)引擎,用戶(hù)無(wú)需自己編寫(xiě)代碼即使系統(tǒng)可獲得強(qiáng)大的查詢(xún)能力,Lucene的查詢(xún)實(shí)現(xiàn)中默認(rèn)實(shí)現(xiàn)了布爾操作、模糊查詢(xún)(Fuzzy Search)、分組查詢(xún)等等。開(kāi)源,可擴(kuò)展能力強(qiáng),有各種語(yǔ)言版本,適合各種平臺(tái),第7頁(yè),共47頁(yè)。Lucene倒排索引原理假設(shè)有兩篇文章1和2 文章1的內(nèi)容為:TomlivesinGuangzhou,IliveinGuangzhoutoo. 文章2的內(nèi)容為:HeoncelivedinShanghai. 經(jīng)過(guò)分詞處理后 文章1
5、的所有關(guān)鍵詞為:tomliveguangzhouiliveguangzhou 文章2的所有關(guān)鍵詞為:heliveshanghai 加上“出現(xiàn)頻率”和“出現(xiàn)位置”信息后,我們的索引結(jié)構(gòu)為:關(guān)鍵詞文章號(hào)出現(xiàn)頻率出現(xiàn)位置guangzhou123,6he211i114live12,212,5,2shanghai213tom111 第8頁(yè),共47頁(yè)。Lucene只關(guān)注文本的索引和搜索lucene建立索引的來(lái)源第9頁(yè),共47頁(yè)。Nutch我們來(lái)大概了解一下Nutch,以及你將在哪方面運(yùn)用它? 我還是先說(shuō)一下Lucene吧。Lucene其實(shí)是一個(gè)提供全文文本搜索的函數(shù)庫(kù),它不是一個(gè)應(yīng)用軟件。它提供很多API
6、函數(shù)讓你可以運(yùn)用到各種實(shí)際應(yīng)用程序中?,F(xiàn)在,它已經(jīng)成為Apache的一個(gè)項(xiàng)目并被廣泛應(yīng)用著。這里列出一些已經(jīng)使用Lucene的系統(tǒng)。Nutch 是一個(gè)建立在Lucene核心之上的Web搜索的實(shí)現(xiàn),它是一個(gè)真正的應(yīng)用程序。也就是說(shuō),你可以直接下載下來(lái)拿過(guò)來(lái)用。它在Lucene的基礎(chǔ)上加了網(wǎng) 絡(luò)爬蟲(chóng)和一些和Web相關(guān)的東東。其目的就是想從一個(gè)簡(jiǎn)單的站內(nèi)索引和搜索推廣到全球網(wǎng)絡(luò)的搜索上,就像Google和Yahoo一樣。當(dāng)然,和那些巨人 競(jìng)爭(zhēng),你得動(dòng)一些腦筋,想一些辦法。我們已經(jīng)測(cè)試過(guò)100M的網(wǎng)頁(yè),并且它的設(shè)計(jì)用在超過(guò)1B的網(wǎng)頁(yè)上應(yīng)該沒(méi)有問(wèn)題。當(dāng)然,讓它運(yùn)行在一臺(tái)機(jī)器上,搜索一 些服務(wù)器,也運(yùn)行的
7、很好。 百度爬蟲(chóng)遐想 第10頁(yè),共47頁(yè)。第二章:入門(mén)實(shí)例Lucene的主要邏輯圖創(chuàng)建索引索引查詢(xún)幫助文檔理解核心索引類(lèi)理解核心搜索類(lèi)更新索引中的Document 第11頁(yè),共47頁(yè)。Lucene的主要邏輯圖 Lucene功能強(qiáng)大,但從根本上說(shuō),主要包括兩塊:一是文本內(nèi)容經(jīng)切詞后索引入庫(kù);二是根據(jù)查詢(xún)條件返回結(jié)果 第12頁(yè),共47頁(yè)。創(chuàng)建索引Directory indexDir = FSDirectory.open(new File(INDEXDIR);IndexWriter writer = new IndexWriter(indexDir, analyzer, true,MaxFieldL
8、ength.LIMITED);/ 2-索引目標(biāo)File file = new File(FILENAME);/ 3-規(guī)定索引范圍,目標(biāo)寫(xiě)入Document doc = new Document();doc.add(new Field(name, file.getName(), Store.YES, Index.ANALYZED);doc.add(new Field(content, IOUtils.readFileContent(file), Store.YES,Index.ANALYZED);doc.add(new Field(size, NumericUtils.longToPrefixC
9、oded(file.length(),Store.YES, Index.NOT_ANALYZED);doc.add(new Field(path, file.getAbsolutePath(), Store.YES,Index.NOT_ANALYZED);writer.addDocument(doc);writer.optimize();/ 5-生成索引writer.close();第13頁(yè),共47頁(yè)。索引查詢(xún)/ 1-劃定檢索范圍String fields = new String name, content ;QueryParser qp = new QueryParser(Version.
10、LUCENE_36,fields , analyzer); / 2-檢索關(guān)鍵字String key = 澤元軟件;Query query = qp.parse(key);/ 3-檢索結(jié)果Directory indexDir = FSDirectory.open(new File(INDEXDIR);Searcher searcher = new IndexSearcher(indexDir,true);TopDocs topDocs = searcher.search(query, 100);第14頁(yè),共47頁(yè)。幫助文檔第15頁(yè),共47頁(yè)。入庫(kù)邏輯入 庫(kù)者定義到庫(kù)中文檔的結(jié)構(gòu),比如需要把網(wǎng)站內(nèi)
11、容加載到全文檢索庫(kù),讓用戶(hù)通過(guò)“站內(nèi)檢索”搜索到相關(guān)的網(wǎng)頁(yè)內(nèi)容。入庫(kù)文檔結(jié)構(gòu)與關(guān)系型數(shù)據(jù)庫(kù)中的表結(jié)構(gòu)類(lèi) 似,每個(gè)入庫(kù)的文檔由多個(gè)字段構(gòu)成,假設(shè)這里需要入庫(kù)的網(wǎng)站內(nèi)容包括如下字段:文章標(biāo)題、作者、發(fā)布時(shí)間、原文鏈接、正文內(nèi)容(一般作為網(wǎng)頁(yè)快照)。包含N個(gè)字段的文檔(DOCUMENT)在真正入庫(kù)前需要經(jīng)過(guò)切詞(或分詞)索引,切詞的規(guī)則由語(yǔ)言分析器(ANALYZER)完成。切分后的“單詞”被注冊(cè)到索引樹(shù)上,供查詢(xún)時(shí)用,另外也需要把其它不需要索引的內(nèi)容入庫(kù),所有這些是文件操作均由STORAGE完成。Lucene的索引樹(shù)結(jié)構(gòu)非常優(yōu)秀,是Lucene的一大特色。第16頁(yè),共47頁(yè)。查詢(xún)邏輯查詢(xún)者輸入查詢(xún)條
12、件,條件之間可以通過(guò)特定運(yùn)算符進(jìn)行運(yùn)算,比如查詢(xún)希望查詢(xún)到與“中國(guó)”和“北京”相關(guān)的記錄,但不希望結(jié)果中包括“海淀區(qū)中關(guān)村”,于是輸入條件為“中國(guó)+北京-海淀區(qū)中關(guān)村”;查詢(xún)條件被傳達(dá)到查詢(xún)分析器中,分析器將將對(duì)“中國(guó)+北京-海 淀區(qū)中關(guān)村”進(jìn)行分析,首先分析器解析字符串的連接符,即這里的加號(hào)和減號(hào),然后對(duì)每個(gè)詞進(jìn)行切詞,一般最小的詞元是兩個(gè)漢字,則中國(guó)和北京兩個(gè)詞不必再 切分,但對(duì)海淀區(qū)中關(guān)村需要切分,假設(shè)根據(jù)切詞算法,把該詞切分為“海淀區(qū)”和“中關(guān)村”兩部分,則最后得到的查詢(xún)條件可以表示為:“中國(guó)” AND “北京” AND NOT(“海淀區(qū)” AND “中關(guān)村”)。查詢(xún)器根據(jù)這個(gè)條件遍歷
13、索引樹(shù),得到查詢(xún)結(jié)果,并返回結(jié)果集,返回的結(jié)果集類(lèi)似于JDBC中的ResultSet。將返回的結(jié)果集顯示在查詢(xún)結(jié)果頁(yè)面,當(dāng)點(diǎn)擊某一條內(nèi)容時(shí),可以鏈接到原始網(wǎng)頁(yè),也可以打開(kāi)全文檢索庫(kù)中存儲(chǔ)的網(wǎng)頁(yè)內(nèi)容。這就是查詢(xún)的邏輯過(guò)程,需要說(shuō)明的是,Lucene默認(rèn)只支持英文,為了便于說(shuō)明問(wèn)題,以上查詢(xún)過(guò)程采用中文舉例,事實(shí)上,當(dāng)Lucene被擴(kuò)充支持中文后就是這么一個(gè)查詢(xún)過(guò)程。第17頁(yè),共47頁(yè)。理解核心索引類(lèi) 為了對(duì)文檔進(jìn)行索引,Lucene 提供了五個(gè)基礎(chǔ)的類(lèi) public class IndexWriter org.apache.lucene.index.IndexWriter public abst
14、ract class Directory org.apache.lucene.store.Directory public abstract class Analyzer org.apache.lucene.analysis.Analyzer public final class Document org.apache.lucene.document.Document public final class Field org.apache.lucene.document.Field 第18頁(yè),共47頁(yè)。IndexWriterIndexWriter是在索引過(guò)程中的中心組件。IndexWriter
15、這個(gè)類(lèi)創(chuàng)建一個(gè)新的索引并且添加文檔到一個(gè)已有的索引中。你可以把IndexWriter想象成讓你可以對(duì)索引進(jìn)行寫(xiě)操作的對(duì)象,但是不能讓你讀取或搜索。IndexWriter不是唯一的用來(lái)修改索引的類(lèi)org.apache.lucene.index.IndexWriter public IndexWriter(Stringpath, Analyzera, booleancreate) Parameters:path - the path to the index directorya - the analyzer to usecreate - true to create the index or o
16、verwrite the existing one; false to append to the existing index String index = C:tomcatwebappsindex1;IndexWriter writer = new IndexWriter(index, new StandardAnalyzer(),true);第19頁(yè),共47頁(yè)。DirectoryDirectory類(lèi)代表一個(gè)Lucene索引的位置。它是一個(gè)抽象類(lèi).其中的兩個(gè)實(shí)現(xiàn):第一個(gè)是 FSDirectory,它表示一個(gè)存儲(chǔ)在文件系統(tǒng)中的索引的位置。第二個(gè)是 RAMDirectory,它表示一個(gè)存儲(chǔ)在內(nèi)
17、存當(dāng)中的索引的位置。 在我們的Indexer示例中,我們使用一個(gè)實(shí)際文件系統(tǒng)目錄的路徑傳遞給IndexWriter的構(gòu)造函數(shù)來(lái)獲得Directory的一個(gè)實(shí)例。IndexWriter然后使用Directory的一個(gè)具體實(shí)現(xiàn)FSDirectory,并在文件系統(tǒng)的一個(gè)目錄中創(chuàng)建索引。 第20頁(yè),共47頁(yè)。Analyzer在一個(gè)文檔被索引之前,首先需要對(duì)文檔內(nèi)容進(jìn)行分詞處理,并且而剔除一些冗余的詞句(例如:a,the,they等),這部分工作就是由 Analyzer 來(lái)做的。 Analyzer 類(lèi)是一個(gè)抽象類(lèi),它有多個(gè)實(shí)現(xiàn)。BrazilianAnalyzer, ChineseAnalyzer, CJ
18、KAnalyzer, CzechAnalyzer, DutchAnalyzer, FrenchAnalyzer, GermanAnalyzer, GreekAnalyzer, KeywordAnalyzer, PatternAnalyzer, PerFieldAnalyzerWrapper, RussianAnalyzer, SimpleAnalyzer, SnowballAnalyzer, StandardAnalyzer, StopAnalyzer, ThaiAnalyzer, WhitespaceAnalyzer針對(duì)不同的語(yǔ)言和應(yīng)用需要選擇適合的 Analyzer。Analyzer 把分
19、詞后的內(nèi)容交給 IndexWriter 來(lái)建立索引。 第21頁(yè),共47頁(yè)。Documentorg.apache.lucene.document.DocumentDocument文檔類(lèi)似數(shù)據(jù)庫(kù)中的一條記錄,可以由好幾個(gè)字段(Field)組成,并且字段可以套用不同的類(lèi)型。一個(gè)Field代表與這個(gè)文檔相關(guān)的元數(shù)據(jù)。元數(shù)據(jù)如作者、標(biāo)題、主題、修改日期等等,分別做為文檔的字段索引和存儲(chǔ)。 Document的方法:void add(Fieldablefield)添加一個(gè)字段(Field)到Document中String get(String name)從文檔中獲得一個(gè)字段對(duì)應(yīng)的文本doc.add(new
20、Field(path, f.getPath(),Field.Store.YES, Field.Index.UN_TOKENIZED);第22頁(yè),共47頁(yè)。Fieldorg.apache.lucene.document.FieldField 對(duì)象是用來(lái)描述一個(gè)文檔的某個(gè)屬性的,比如一封電子郵件的標(biāo)題和內(nèi)容可以用兩個(gè) Field 對(duì)象分別描述。 Field(Stringname, bytevalue, Field.Storestore) Create a stored field with binary value.Field(Stringname, Readerreader) Create a
21、tokenized and indexed field that is not stored.Field(Stringname, Readerreader, Field.TermVectortermVector) Create a tokenized and indexed field that is not stored, optionally with storing term vectors.Field(Stringname, Stringvalue, Field.Storestore, Field.Indexindex) Create a field by specifying its
22、 name, value and how it will be saved in the index.Field(Stringname, Stringvalue, Field.Storestore, Field.Indexindex, Field.TermVectortermVector) Create a field by specifying its name, value and how it will be saved in the index.Field(Stringname, TokenStreamtokenStream) Create a tokenized and indexe
23、d field that is not stored.Field(Stringname, TokenStreamtokenStream, Field.TermVectortermVector) Create a tokenized and indexed field that is not stored, optionally with storing term vectors.第23頁(yè),共47頁(yè)。靜態(tài)內(nèi)部類(lèi)Field.Index 表示Field的索引方式NO 表示該Field不需要索引,也就是用戶(hù)不需要去查找該Field的值NO_NORMS 表示對(duì)該Field進(jìn)行索引,但是不使用Analyz
24、er,同時(shí)禁止它參加評(píng)分,主要是為了減少內(nèi)存的消耗TOKENIZED 表示該Field先被分詞再索引UN_TOKENIZED 像鏈接地址URL、文件系統(tǒng)路徑信息、時(shí)間日期、人名、居民身份證、電話(huà)號(hào)碼等等通常將被索引并且完整的存儲(chǔ)在索引中,但一般不需要切分詞Field.Store 表示Field的存儲(chǔ)方式COMPRESS壓縮存儲(chǔ) NO 原文不存儲(chǔ)在索引文件中,搜索結(jié)果命中后,再根據(jù)其他附加屬性如文件的Path,數(shù)據(jù)庫(kù)的主鍵等,重新連接打開(kāi)原文,適合原文內(nèi)容較大的情況。 YES索引文件本來(lái)只存儲(chǔ)索引數(shù)據(jù), 此設(shè)計(jì)將原文內(nèi)容直接也存儲(chǔ)在索引文件中,如文檔的標(biāo)題。 第24頁(yè),共47頁(yè)。理解核心搜索類(lèi)
25、只需要幾個(gè)類(lèi)來(lái)執(zhí)行基本的搜索操作: public class IndexSearcherorg.apache.lucene.search.IndexSearcher extends Searcher public final class Termorg.apache.lucene.index.Term public abstract class Query org.apache.lucene.search.Query public class TermQueryorg.apache.lucene.search.TermQuery extends Query public final class
26、 Hits org.apache.lucene.search.Hits 第25頁(yè),共47頁(yè)。IndexSearcherIndexSearcher是用來(lái)在建立好的索引上進(jìn)行搜索的 它只能以只讀的方式打開(kāi)一個(gè)索引,所以可以有多個(gè)IndexSearcher的實(shí)例在一個(gè)索引上進(jìn)行操作。它提供幾個(gè)搜索方法,其中一些在抽象基類(lèi)Searcher中實(shí)現(xiàn);第26頁(yè),共47頁(yè)。Search方法返回值為Hits型的對(duì)象:public final Hits search(Queryquery) throws IOException Returns the documents matching query. publi
27、c Hits search(Queryquery, Filterfilter) throws IOException Returns the documents matching query and filter. public Hits search(Queryquery, Sortsort) throws IOException Returns documents matching query sorted by sort. public Hits search(Queryquery, Filterfilter, Sortsort) throws IOException Returns d
28、ocuments matching query and filter, sorted by sort.第27頁(yè),共47頁(yè)。Term Term是搜索的基本單元。一個(gè)Term對(duì)象有兩個(gè)String類(lèi)型的域組成:字段的名稱(chēng)和字段的值。在搜索時(shí),你可能創(chuàng)建Term對(duì)象并和TermQuery同時(shí)使用。其中第一個(gè)參數(shù)代表了要在文檔的哪一個(gè)Field上進(jìn)行查找,第二個(gè)參數(shù)代表了要查詢(xún)的關(guān)鍵詞。 Query q = new TermQuery(new Term(“fieldName”, “queryWord ”); Hits hits = sercher.search(q); 這段代碼使Lucene找出在fi
29、eldName字段中含有單詞queryWord的所有文檔。因?yàn)門(mén)ermQuery對(duì)象繼承自它的抽象父類(lèi)Query,你可以在等式的左邊用Query類(lèi)型。 第28頁(yè),共47頁(yè)。Query Query是一個(gè)抽象類(lèi),這個(gè)類(lèi)的目的是把用戶(hù)輸入的查詢(xún)字符串封裝成Lucene能夠識(shí)別的Query。 Lucene中包含一些Query的具體子類(lèi)。Direct Known Subclasses: BooleanQuery, BoostingQuery, ConstantScoreQuery, ConstantScoreRangeQuery, CustomScoreQuery, DisjunctionMaxQuer
30、y, FilteredQuery, FuzzyLikeThisQuery, MatchAllDocsQuery, MoreLikeThisQuery, MultiPhraseQuery, MultiTermQuery, PhraseQuery, PrefixQuery, RangeQuery, SpanQuery, TermQuery, ValueSourceQuery第29頁(yè),共47頁(yè)。Hits Hits是用來(lái)保存搜索的結(jié)果的。 基于性能考慮,Hits的實(shí)例并不從索引中加載所有匹配查詢(xún)的所有文檔,而是每次一小部分。 public final int length() public final
31、 Document doc(intn)public final float score(intn)public final int id(intn)public Iterator iterator() 第30頁(yè),共47頁(yè)。BooleanQuery布爾搜索BooleanQuery是實(shí)際開(kāi)發(fā)過(guò)程中經(jīng)常使用的一種Query。它其實(shí)是一個(gè)組合的Query,在使用時(shí)可以把各種Query對(duì)象添加進(jìn)去并標(biāo)明它們之間的邏輯關(guān)系。BooleanQuery是可以嵌套的(BooleanQuery是一個(gè)布爾子句的容器)一個(gè)BooleanQuery可以成為另一個(gè)BooleanQuery的條件子句。布爾型Query的子句
32、數(shù)目不能超過(guò)1024。 第31頁(yè),共47頁(yè)。BooleanClause布爾搜索public void add(Queryquery, BooleanClause.Occuroccur)BooleanClause用于表示布爾查詢(xún)子句關(guān)系的類(lèi),包括:BooleanClause.Occur.MUST,BooleanClause.Occur.MUST_NOT,BooleanClause.Occur.SHOULD。有以下6種組合:1MUST和MUST:取得連個(gè)查詢(xún)子句的交集。2MUST和MUST_NOT:表示查詢(xún)結(jié)果中不能包含MUST_NOT所對(duì)應(yīng)得查詢(xún)子句的檢索結(jié)果。3MUST_NOT和MUST_NO
33、T:無(wú)意義,檢索無(wú)結(jié)果。4SHOULD與MUST、SHOULD與MUST_NOT:SHOULD與MUST連用時(shí),無(wú)意義,結(jié)果為MUST子句的檢索結(jié)果。SHOULD與MUST_NOT連用時(shí), SHOULD功能同MUST,相當(dāng)于MUST和MUST NOT的檢索結(jié)果。5SHOULD與SHOULD:表示“或”關(guān)系,最終檢索結(jié)果為所有檢索子句的并集。第32頁(yè),共47頁(yè)。RangeQuery范圍搜索public RangeQuery(TermlowerTerm, TermupperTerm, booleaninclusive) 布爾型的參數(shù)表示是否將2個(gè)臨界值也加入到搜索中查找所有書(shū)號(hào)在000001到00
34、0005之間的圖書(shū),并且不包括000001和000005IndexSearcher searcher = new IndexSearcher(PATH);Term begin = new Term(booknumber,000001);Term end = new Term(booknumber,000005);RangeQuery query = new RangeQuery(begin,end,false);Hits hits = searcher.search(query);第33頁(yè),共47頁(yè)。搜索類(lèi)型PrefixQuery 前綴搜索PhraseQuery短語(yǔ)搜索FuzzyQuery模糊
35、搜索WildcardQuery通配符搜索SpanQuery跨度搜索_RegexQuery正則表達(dá)式搜索第34頁(yè),共47頁(yè)。更新索引中的Document “如何才能更新索引中的文檔?”是一個(gè)在Lucene用戶(hù)郵件列表中經(jīng)常問(wèn)的問(wèn)題。Lucene并沒(méi)有提供更新方法;Document必須首先從索引中刪除然后再重新添加它如果你需要?jiǎng)h除和添加多個(gè)Document,最好是進(jìn)行批操作。按以下步驟: 1. 打開(kāi)IndexReader。 2. 刪除所有你要?jiǎng)h除的Document。 3. 關(guān)閉IndexReader。 4. 打開(kāi)IndexWriter。 5. 添加你要添加的所有Document。 6. 關(guān)閉Ind
36、exWriter。 第35頁(yè),共47頁(yè)。第三章:分析器Analyzer為什么要分詞分詞的種類(lèi)最大正向匹配法中文分詞的挑戰(zhàn)常用的中文分詞器第36頁(yè),共47頁(yè)。為什么要分詞?詞是最小的能夠獨(dú)立活動(dòng)的有意義的語(yǔ)言成分,英文單詞之間是以空格作為自然分界符的,而漢語(yǔ)是以字為基本的書(shū)寫(xiě)單位,詞語(yǔ)之間沒(méi)有明顯的區(qū)分標(biāo)記,因此,中文詞語(yǔ)分析是中文信息處理的基礎(chǔ)與關(guān)鍵。如果不使用中文分詞,可以采用單個(gè)漢字索引方式。例如, 雅虎 ,先索引 雅字,然后再索引虎字。同樣,對(duì)于一篇文章,先把所有的漢字都單獨(dú)索引一次,并記錄他們的位置。搜索過(guò)程中,也是先找雅字的所有文檔,再找虎字的所有文檔,然后做交叉與運(yùn)算,即包含這兩個(gè)字,而且位置連續(xù)的文檔才會(huì)做為符合要求的結(jié)果。這種方式是最基本的索引方式,現(xiàn)在有些小引擎中還在使用。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- JJG 878-2025熔體流動(dòng)速率儀檢定規(guī)程
- LS/T 6144-2023糧油檢驗(yàn)糧食中鎘的測(cè)定膠體金快速定量法
- 2025至2030年中國(guó)奧運(yùn)毛絨玩具數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)臺(tái)式真空充氣包裝機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 新疆維吾爾自治區(qū)喀什地區(qū)莎車(chē)縣2024-2025學(xué)年高二上學(xué)期1月期末考試物理試題(含答案)
- 2024-2025學(xué)年重慶市酉陽(yáng)縣八年級(jí)(上)期末歷史試卷(含答案)
- 2019-2025年消防設(shè)施操作員之消防設(shè)備中級(jí)技能考前沖刺模擬試卷B卷含答案
- 2020年中考生物試題(含答案)
- 遺產(chǎn)繼承遺囑代辦合同(2篇)
- 采購(gòu)與供應(yīng)鏈分包合同(2篇)
- 2025廣東深圳證券交易所及其下屬單位信息技術(shù)專(zhuān)業(yè)人員招聘筆試參考題庫(kù)附帶答案詳解
- 第20課《井岡翠竹》部編版2024-2025七年級(jí)語(yǔ)文下冊(cè)
- 2025年河南交通職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025年湖南科技職業(yè)學(xué)院高職單招高職單招英語(yǔ)2016-2024年參考題庫(kù)含答案解析
- 西學(xué)中培訓(xùn)基地結(jié)業(yè)考試試題
- 2025年度政府機(jī)關(guān)勞動(dòng)合同封面設(shè)計(jì)參考2篇
- 中央空調(diào)改造項(xiàng)目施工方案
- 家政服務(wù)中的時(shí)間管理與效率提升
- 手術(shù)患者轉(zhuǎn)運(yùn)交接課件
- 老年骨質(zhì)疏松性疼痛診療與管理中國(guó)專(zhuān)家共識(shí)(2024版)解讀
- 高中生物選擇性必修1試題
評(píng)論
0/150
提交評(píng)論