免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
Lucene基本適用介紹
Lucene基本適用介紹(轉(zhuǎn)自BlogJava的BlueDavy)
 想要找一個使用Lucene的案例,怎么也找不到,多數(shù)都是概念介紹,BlogJava的BlueDavy

老兄的文章不錯,希望以后能自己提供將Lucene整合到自己應(yīng)用的案例和代碼,塞!這里借花獻(xiàn)佛了!

----------------------------------------------------------------------------------------------------------

今天用了下Lucene,發(fā)現(xiàn)網(wǎng)上雖然也有不少介紹它的文檔,不過很多都偏向介紹概念呀、設(shè)計或者是一些更為深入的東西,對于其入門使用的介紹性的文檔并不多,就寫了這么一篇。

Lucene基本使用介紹

 

 

本文的目的不在于對Lucene的概念和設(shè)計這些進(jìn)行介紹,僅在于介紹怎么樣去使用Lucene來達(dá)到自己想要的幾種常見的全文檢索的需求,如果想深入了解Lucene的話本文不會帶給你什么收獲的??赐瓯疚暮笙敫钊氲牧私?/span>Lucene請訪問:http://lucene.apache.org

 

 

 

一.  概述

隨著系統(tǒng)信息的越來越多,怎么樣從這些信息海洋中撈起自己想要的那一根針就變得非常重要了,全文檢索是通常用于解決此類問題的方案,而Lucene則為實現(xiàn)全文檢索的工具,任何應(yīng)用都可通過嵌入它來實現(xiàn)全文檢索。

二.  環(huán)境搭建

lucene.apache.org上下載最新版本的lucene.jar,將此jar作為項目的build path,那么在項目中就可以直接使用lucene了。

三.  使用說明

3.1.       基本概念

這里介紹的主要為在使用中經(jīng)常碰到一些概念,以大家都比較熟悉的數(shù)據(jù)庫來進(jìn)行類比的講解,使用Lucene進(jìn)行全文檢索的過程有點類似數(shù)據(jù)庫的這個過程,table---à查詢相應(yīng)的字段或查詢條件----à返回相應(yīng)的記錄,首先是IndexWriter,通過它建立相應(yīng)的索引表,相當(dāng)于數(shù)據(jù)庫中的table,在構(gòu)建此索引表時需指定的為該索引表采用何種方式進(jìn)行構(gòu)建,也就是說對于其中的記錄的字段以什么方式來進(jìn)行格式的劃分,這個在Lucene中稱為AnalyzerLucene提供了幾種環(huán)境下使用的AnalyzerSimpleAnalyzer、StandardAnalyzerGermanAnalyzer等,其中StandardAnalyzer是經(jīng)常使用的,因為它提供了對于中文的支持,在表建好后我們就需要往里面插入用于索引的記錄,在Lucene中這個稱為Document,有點類似數(shù)據(jù)庫中table的一行記錄,記錄中的字段的添加方法,在Lucene中稱為Field,這個和數(shù)據(jù)庫中基本一樣,對于Field Lucene分為可被索引的,可切分的,不可被切分的,不可被索引的幾種組合類型,通過這幾個元素基本上就可以建立起索引了。在查詢時經(jīng)常碰到的為另外幾個概念,首先是QueryLucene提供了幾種經(jīng)??梢杂玫降?/span>QueryTermQuery、MultiTermQuery、BooleanQuery、WildcardQuery、PhraseQuery、PrefixQueryPhrasePrefixQuery、FuzzyQueryRangeQuery、SpanQueryQuery其實也就是指對于需要查詢的字段采用什么樣的方式進(jìn)行查詢,如模糊查詢、語義查詢、短語查詢、范圍查詢、組合查詢等,還有就是QueryParser,QueryParser可用于創(chuàng)建不同的Query,還有一個MultiFieldQueryParser支持對于多個字段進(jìn)行同一關(guān)鍵字的查詢,IndexSearcher概念指的為需要對何目錄下的索引文件進(jìn)行何種方式的分析的查詢,有點象對數(shù)據(jù)庫的哪種索引表進(jìn)行查詢并按一定方式進(jìn)行記錄中字段的分解查詢的概念,通過IndexSearcher以及Query即可查詢出需要的結(jié)果,Lucene返回的為Hits.通過遍歷Hits可獲取返回的結(jié)果的Document,通過Document則可獲取Field中的相關(guān)信息了。

通過對于上面在建立索引和全文檢索的基本概念的介紹希望能讓你對Lucene建立一定的了解。

3.2.       全文檢索需求的實現(xiàn)

索引建立部分的代碼:

private void createIndex(String indexFilePath) throws Exception{

        IndexWriter iwriter
=getWriter(indexFilePath);

        Document doc
=new Document();

        doc.add(Field.Keyword(
"name","jerry"));

        doc.add(Field.Text(
"sender","bluedavy@gmail.com"));

        doc.add(Field.Text(
"receiver","google@gmail.com"));

        doc.add(Field.Text(
"title","用于索引的標(biāo)題"));

        doc.add(Field.UnIndexed(
"content","不建立索引的內(nèi)容"));

        Document doc2
=new Document();

        doc2.add(Field.Keyword(
"name","jerry.lin"));

        doc2.add(Field.Text(
"sender","bluedavy@hotmail.com"));

        doc2.add(Field.Text(
"receiver","msn@hotmail.com"));

        doc2.add(Field.Text(
"title","用于索引的第二個標(biāo)題"));

        doc2.add(Field.Text(
"content","建立索引的內(nèi)容"));

        iwriter.addDocument(doc);

        iwriter.addDocument(doc2);

        iwriter.optimize();

        iwriter.close();

    }


    

    
private IndexWriter getWriter(String indexFilePath) throws Exception{

        boolean append
=true;

        File file
=new File(indexFilePath+File.separator+"segments");

        
if(file.exists())

            append
=false

        
return new IndexWriter(indexFilePath,analyzer,append);

    }


3.2.1.       對于某字段的關(guān)鍵字的模糊查詢

Query query=new WildcardQuery(new Term("sender","*davy*"));

        

        Searcher searcher
=new IndexSearcher(indexFilePath);

        Hits hits
=searcher.search(query);

        
for (int i = 0; i < hits.length(); i++{

            System.
out.println(hits.doc(i).get("name"));

        }


3.2.2.       對于某字段的關(guān)鍵字的語義查詢

Query query=QueryParser.parse("索引","title",analyzer);

        

        Searcher searcher
=new IndexSearcher(indexFilePath);

        Hits hits
=searcher.search(query);

        
for (int i = 0; i < hits.length(); i++{

            System.
out.println(hits.doc(i).get("name"));

        }


3.2.3.       對于多字段的關(guān)鍵字的查詢

Query query=MultiFieldQueryParser.parse("索引",new String[]{"title","content"},analyzer);

        

        Searcher searcher
=new IndexSearcher(indexFilePath);

        Hits hits
=searcher.search(query);

        
for (int i = 0; i < hits.length(); i++{

            System.
out.println(hits.doc(i).get("name"));

        }


3.2.4.       復(fù)合查詢(多種查詢條件的綜合查詢)

Query query=MultiFieldQueryParser.parse("索引",new String[]{"title","content"},analyzer);

        Query mquery
=new WildcardQuery(new Term("sender","bluedavy*"));

        TermQuery tquery
=new TermQuery(new Term("name","jerry"));

        

        BooleanQuery bquery
=new BooleanQuery();

        bquery.add(query,
true,false);

        bquery.add(mquery,
true,false);

        bquery.add(tquery,
true,false);

        

        Searcher searcher
=new IndexSearcher(indexFilePath);

        Hits hits
=searcher.search(bquery);

        
for (int i = 0; i < hits.length(); i++{

            System.
out.println(hits.doc(i).get("name"));

        }


四.  總結(jié)

相信大家通過上面的說明能知道Lucene的一個基本的使用方法,在全文檢索時建議大家先采用語義時的搜索,先搜索出有意義的內(nèi)容,之后再進(jìn)行模糊之類的搜索,^_^,這個還是需要根據(jù)搜索的需求才能定了,Lucene還提供了很多其他更好用的方法,這個就等待大家在使用的過程中自己去進(jìn)一步的摸索了,比如對于Lucene本身提供的Query的更熟練的掌握,對于FilterSorter的使用,自己擴(kuò)展實現(xiàn)Analyzer,自己實現(xiàn)Query等等,甚至可以去了解一些關(guān)于搜索引擎的技術(shù)(切詞、索引排序 etc)等等。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
大數(shù)據(jù)處理方面的 7 個開源搜索引擎
想學(xué)習(xí)lucene不得不知道的基礎(chǔ)知識收集整理摘錄
基于Lucene/XML的站內(nèi)全文檢索解決方案
一步一步學(xué)lucene——(第一步:概念篇)
空間屬性一體化全文檢索方案:4.關(guān)鍵技術(shù)之Elasticsearch簡介
Lucene與全文檢索 __比較詳細(xì)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服