久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Lucene簡(jiǎn)單實(shí)現(xiàn)文件索引及查詢(xún)

 昵稱(chēng)33542116 2020-02-03

【承接上文】
1、問(wèn):Lucene優(yōu)點(diǎn),?
答:a,、Lucene定義了一套以9字節(jié)為基礎(chǔ)的索引文件格式,使得兼容系統(tǒng)或者不同平臺(tái)的應(yīng)用能夠共享建立的索引文件,。
b、在傳統(tǒng)倒排索引的基礎(chǔ)上,實(shí)現(xiàn)了分塊索引,。
【ps:這里說(shuō)明一下什么是倒排索引】
實(shí)際應(yīng)用中需要根據(jù)屬性值來(lái)查找記錄,這種索引表中的每一項(xiàng)都包括一個(gè)屬性值和對(duì)應(yīng)的記錄地址,。由于是由屬性值來(lái)確定記錄位置,,因而被稱(chēng)為倒排索引,。
c、用戶(hù)無(wú)需編寫(xiě)代碼即可使用系統(tǒng)強(qiáng)大的查詢(xún)能力,,默認(rèn)實(shí)現(xiàn)布爾,、模糊、分組查詢(xún)等,。
d,、雖然Lucene使用Java語(yǔ)言,但是開(kāi)源之后就有許多大牛使得其能運(yùn)行在各種各樣的平臺(tái)上,。
2,、問(wèn):能不能別整那些虛頭巴腦的,整點(diǎn)代碼不香嗎,?
答:香,,好滴。以idea為例,。
《1,、idea搭建項(xiàng)目》看圖:
Lucene簡(jiǎn)單實(shí)現(xiàn)文件索引及查詢(xún)Lucene簡(jiǎn)單實(shí)現(xiàn)文件索引及查詢(xún)Lucene簡(jiǎn)單實(shí)現(xiàn)文件索引及查詢(xún)Lucene簡(jiǎn)單實(shí)現(xiàn)文件索引及查詢(xún)Lucene簡(jiǎn)單實(shí)現(xiàn)文件索引及查詢(xún)
《2、添加Lucene依賴(lài)》:

<properties> <java.version>1.8</java.version> <lunece.version>4.10.2</lunece.version></properties><dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <!-- lucene核心庫(kù) --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>${lunece.version}</version> </dependency> <!-- Lucene的查詢(xún)解析器 --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-queryparser</artifactId> <version>${lunece.version}</version> </dependency> <!-- lucene的默認(rèn)分詞器庫(kù) --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-analyzers-common</artifactId> <version>${lunece.version}</version> </dependency> <!-- lucene的高亮顯示 --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-highlighter</artifactId> <version>${lunece.version}</version> </dependency></dependencies>

《3,、實(shí)例代碼》

package frozen;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.lucene.document.StringField;import org.apache.lucene.document.TextField;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.IndexWriterConfig;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;import org.apache.lucene.util.Version;import org.junit.Test;import java.io.File;/** * 思路: * 1,、創(chuàng)建文檔對(duì)象 * 2、創(chuàng)建存儲(chǔ)目錄 * 3,、創(chuàng)建分詞器 * 4,、索引 * 5、將文檔交給索引 * 6,、提交與關(guān)閉 * Frozen * 2020-2-2 */public class Frozen {        @Test        public void frozenLucene() throws Exception{                //1,、創(chuàng)建文檔對(duì)象                Document document = new Document();                /*                創(chuàng)建并添加字段信息。                參數(shù):字段的名稱(chēng),、字段的值,、是否存儲(chǔ),                Store.YES代表存儲(chǔ)到文檔列表,。                Store.NO代表不存儲(chǔ)                 */                document.add(new StringField('id', '1', Field.Store.YES));                /*                這里我們title字段需要用TextField,,                即創(chuàng)建索引又會(huì)被分詞。StringField會(huì)創(chuàng)建索引,,但是不會(huì)被分詞                 */                document.add(new TextField('title', '爸媽省心,、自己舒心,10萬(wàn)級(jí)熱門(mén)家轎推薦,!', Field.Store.YES));                //2 索引目錄類(lèi),指定索引在硬盤(pán)中的位置                Directory directory = FSDirectory.open(new File('E:\\frozen'));                //3 創(chuàng)建分詞器對(duì)象                Analyzer analyzer = new StandardAnalyzer();                //4 索引寫(xiě)出工具的配置對(duì)象                IndexWriterConfig conf = new IndexWriterConfig(Version.LATEST, analyzer);                //5 創(chuàng)建索引的寫(xiě)出工具類(lèi),。參數(shù):索引的目錄和配置信息                IndexWriter indexWriter = new IndexWriter(directory, conf);                //6 把文檔交給IndexWriter                indexWriter.addDocument(document);                //7 提交                indexWriter.commit();                //8 關(guān)閉                indexWriter.close();                System.err.println('測(cè)試結(jié)束!!,!');        }}

Lucene簡(jiǎn)單實(shí)現(xiàn)文件索引及查詢(xún)
到這里,,簡(jiǎn)單的一個(gè)Lucene文件索引就完成了
【你要查看索引可以利用工具,這里不做說(shuō)明】
《4,、IK分詞器(重要)》
IK提供兩種分詞模式:智能模式和細(xì)粒度模式(智能:對(duì)應(yīng)es的IK插件的ik_smart,,細(xì)粒度:對(duì)應(yīng)es的IK插件的ik_max_word)。
IK分詞添加依賴(lài)
Lucene簡(jiǎn)單實(shí)現(xiàn)文件索引及查詢(xún)
《5,、查詢(xún)Lucene索引》

/** 1,、讀取目錄對(duì)象、2,、索引讀取工具,、 3、索引搜索工具,、4,、查詢(xún)解析器、5,、查詢(xún)對(duì)象,、 6、開(kāi)始搜索,、7,、其他 */ @Test public void frozenSearch() throws Exception { // 索引目錄對(duì)象 Directory directory = FSDirectory.open(new File('E:\\frozen')); // 索引讀取工具 IndexReader reader = DirectoryReader.open(directory); // 索引搜索工具 IndexSearcher searcher = new IndexSearcher(reader); // 創(chuàng)建查詢(xún)解析器,兩個(gè)參數(shù):默認(rèn)要查詢(xún)的字段的名稱(chēng),分詞器 QueryParser parser = new QueryParser('title', new IKAnalyzer()); // 創(chuàng)建查詢(xún)對(duì)象 Query query = parser.parse('10萬(wàn)級(jí)'); // 搜索數(shù)據(jù),兩個(gè)參數(shù):查詢(xún)條件對(duì)象要查詢(xún)的最大結(jié)果條數(shù) // 返回的結(jié)果是 按照匹配度排名得分前N名的文檔信息(包含查詢(xún)到的總條數(shù)信息,、所有符合條件的文檔的編號(hào)信息),。 TopDocs topDocs = searcher.search(query, 10); // 獲取總條數(shù) System.out.println('本次搜索共找到' + topDocs.totalHits + '條數(shù)據(jù)'); // 獲取得分文檔對(duì)象(ScoreDoc)數(shù)組.SocreDoc中包含:文檔的編號(hào)、文檔的得分 ScoreDoc[] scoreDocs = topDocs.scoreDocs; for (ScoreDoc scoreDoc : scoreDocs) { // 取出文檔編號(hào) int docID = scoreDoc.doc; // 根據(jù)編號(hào)去找文檔 Document doc = reader.document(docID); System.out.println('id: ' + doc.get('id')); System.out.println('title: ' + doc.get('title')); System.out.println('匹配度: ' + scoreDoc.score); } }

Lucene簡(jiǎn)單實(shí)現(xiàn)文件索引及查詢(xún)

《6,、Lucene核心API》
1,、QueryParser(單一字段的查詢(xún)解析器)
2、MultiFieldQueryParser(多字段的查詢(xún)解析器)
3,、IndexSearch可以幫助我們實(shí)現(xiàn):快速搜索,、排序、打分等功能
4,、通過(guò)IndexSearcher對(duì)象,,我們可以搜索,獲取結(jié)果:TopDocs對(duì)象
在TopDocs中,,包含兩部分信息:int totalHits :查詢(xún)到的總條數(shù),、ScoreDoc[] scoreDocs : 得分文檔對(duì)象的數(shù)組
5、ScoreDoc是得分文檔對(duì)象,,包含兩部分?jǐn)?shù)據(jù):int doc :文檔的編號(hào)----lucene給文檔的一個(gè)唯一編號(hào),;float score :文檔的得分信息
拿到編號(hào)后,我們還需要根據(jù)編號(hào)來(lái)獲取真正的文檔信息
【還有,,查詢(xún)結(jié)果高亮顯示:略,!】

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多