<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    大漠駝鈴

    置身浩瀚的沙漠,方向最為重要,希望此blog能向大漠駝鈴一樣,給我方向和指引。
    Java,Php,Shell,Python,服務(wù)器運(yùn)維,大數(shù)據(jù),SEO, 網(wǎng)站開發(fā)、運(yùn)維,云服務(wù)技術(shù)支持,IM服務(wù)供應(yīng)商, FreeSwitch搭建,技術(shù)支持等. 技術(shù)討論QQ群:428622099
    隨筆 - 238, 文章 - 3, 評論 - 117, 引用 - 0
    數(shù)據(jù)加載中……

    Lucene基本使用介紹

    本文的 目的不在于對Lucene的概念和設(shè)計(jì)這些進(jìn)行介紹,僅在于介紹怎么樣去使用Lucene來達(dá)到自己想要的幾種常見的全文檢索的需求,如果想深入了解 Lucene的話本文不會帶給你什么收獲的。看完本文后想更深入的了解Lucene請?jiān)L問:http://lucene.apache.org

    一. 概述

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


    二. 環(huán)境搭建


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


    三. 使用說明


    3.1.       基本概念


    這里介紹的主要為在使用中經(jīng)常碰到一些概念,以大家都比較熟悉的數(shù)據(jù)庫來進(jìn)行類比的講解,使用Lucene進(jìn)行全文檢索的過程有點(diǎn)類似數(shù)據(jù)庫的這個(gè)過程,table---à查詢相應(yīng)的字段或查詢條件----à返回相應(yīng)的記錄,首先是IndexWriter,通過它建立相應(yīng)的索引表,相當(dāng)于數(shù)據(jù)庫中的table,在構(gòu)建此索引表時(shí)需指定的為該索引表采用何種方式進(jìn)行構(gòu)建,也就是說對于其中的記錄的字段以什么方式來進(jìn)行格式的劃分,這個(gè)在Lucene中稱為AnalyzerLucene提供了幾種環(huán)境下使用的AnalyzerSimpleAnalyzerStandardAnalyzerGermanAnalyzer等,其中StandardAnalyzer是經(jīng)常使用的,因?yàn)樗峁┝藢τ谥形牡闹С郑诒斫ê煤笪覀兙托枰锩娌迦胗糜谒饕挠涗洠?/span>Lucene中這個(gè)稱為Document,有點(diǎn)類似數(shù)據(jù)庫中table的一行記錄,記錄中的字段的添加方法,在Lucene中稱為Field,這個(gè)和數(shù)據(jù)庫中基本一樣,對于Field Lucene分為可被索引的,可切分的,不可被切分的,不可被索引的幾種組合類型,通過這幾個(gè)元素基本上就可以建立起索引了。在查詢時(shí)經(jīng)常碰到的為另外幾個(gè)概念,首先是QueryLucene提供了幾種經(jīng)常可以用到的QueryTermQueryMultiTermQueryBooleanQueryWildcardQueryPhraseQueryPrefixQueryPhrasePrefixQueryFuzzyQueryRangeQuerySpanQueryQuery其實(shí)也就是指對于需要查詢的字段采用什么樣的方式進(jìn)行查詢,如模糊查詢、語義查詢、短語查詢、范圍查詢、組合查詢等,還有就是QueryParserQueryParser可用于創(chuàng)建不同的Query,還有一個(gè)MultiFieldQueryParser支持對于多個(gè)字段進(jìn)行同一關(guān)鍵字的查詢,IndexSearcher概念指的為需要對何目錄下的索引文件進(jìn)行何種方式的分析的查詢,有點(diǎn)象對數(shù)據(jù)庫的哪種索引表進(jìn)行查詢并按一定方式進(jìn)行記錄中字段的分解查詢的概念,通過IndexSearcher以及Query即可查詢出需要的結(jié)果,Lucene返回的為Hits.通過遍歷Hits可獲取返回的結(jié)果的Document,通過Document則可獲取Field中的相關(guān)信息了。


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


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

    posted on 2009-03-03 11:35 草原上的駱駝 閱讀(283) 評論(0)  編輯  收藏 所屬分類: 搜索服務(wù)

    主站蜘蛛池模板: 午夜毛片不卡高清免费| 久久性生大片免费观看性| www.999精品视频观看免费| 久久久亚洲欧洲日产国码二区| 中出五十路免费视频| 亚洲乱码日产一区三区| 少妇性饥渴无码A区免费| 久久亚洲精品AB无码播放| 99视频免费观看| 自拍日韩亚洲一区在线| 免费观看大片毛片| 黄页视频在线观看免费| 久久综合亚洲色HEZYO国产| 国产在线观看免费av站| 久久精品亚洲综合专区| 亚洲精品视频在线观看免费| 亚洲一区二区三区乱码在线欧洲| 男人的好看免费观看在线视频| 蜜桃传媒一区二区亚洲AV | 国产成人精品亚洲2020| 国产高清免费在线| 99精品免费视频| 亚洲国产精品成人久久久| 成人永久福利免费观看| 两个人的视频www免费| 91精品国产亚洲爽啪在线观看| 99久久综合国产精品免费| 国产成人亚洲综合a∨| 亚洲精品~无码抽插| 丁香花免费完整高清观看| 日本黄页网址在线看免费不卡| 亚洲成aⅴ人片久青草影院| 国产成人一区二区三区视频免费| 亚洲一级毛片中文字幕| 亚洲成av人片天堂网老年人| 久久青草91免费观看| 亚洲成av人无码亚洲成av人| 亚洲动漫精品无码av天堂| 成人最新午夜免费视频| 久久av免费天堂小草播放| 亚洲欧洲日韩国产一区二区三区 |