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

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

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

    Lucene基本使用介紹

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

    Lucene基本使用介紹

     

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

     

    一.  概述

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

    二.  環境搭建

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

    三.  使用說明

    3.1.       基本概念

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

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

    3.2.       全文檢索需求的實現

    索引建立部分的代碼:

    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","用于索引的標題"));

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

            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","用于索引的第二個標題"));

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

            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.       對于某字段的關鍵字的模糊查詢

    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.       對于某字段的關鍵字的語義查詢

    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.       對于多字段的關鍵字的查詢

    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.       復合查詢(多種查詢條件的綜合查詢)

    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"));

            }


    四.  總結

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

    posted on 2005-06-07 22:16 BlueDavy 閱讀(10914) 評論(9)  編輯  收藏 所屬分類: Java

    評論

    # re: Lucene基本使用介紹 2006-01-20 16:49 mars

    good  回復  更多評論   

    # re: Lucene基本使用介紹 2006-01-20 16:50 mas

    good!!!  回復  更多評論   

    # re: Lucene基本使用介紹 2006-03-17 17:27 lucene

    很有收獲,謝謝  回復  更多評論   

    # re: Lucene基本使用介紹 2006-03-18 12:22 求知

    很不錯!!googd!
      回復  更多評論   

    # re: Lucene基本使用介紹 2006-04-01 15:20 zdy

    很好的帖子 謝樓主!  回復  更多評論   

    # re: Lucene基本使用介紹 2006-05-29 11:18 bluebaby

    感謝樓主  回復  更多評論   

    # re: Lucene基本使用介紹 2007-10-15 13:29 lisa

    thanks!!1  回復  更多評論   

    # re: Lucene基本使用介紹 2007-12-02 12:20 luguo

    THanks  回復  更多評論   

    # re: Lucene基本使用介紹[未登錄] 2009-03-25 11:14 Egg

    太感謝啦?。?!  回復  更多評論   

    公告

     









    feedsky
    抓蝦
    google reader
    鮮果

    導航

    <2006年3月>
    2627281234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    統計

    隨筆分類

    隨筆檔案

    文章檔案

    Blogger's

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 18女人毛片水真多免费| 日韩一区二区a片免费观看 | 亚洲第一成人在线| 久久国产精品免费专区| 久久亚洲精品无码观看不卡| 国产成人人综合亚洲欧美丁香花 | 亚洲AV无码一区二区三区性色 | 国产黄色一级毛片亚洲黄片大全| 亚洲国产精品日韩av不卡在线| 18禁止观看免费私人影院| 亚洲欧洲日韩国产综合在线二区| 九九99热免费最新版| 亚洲日本一区二区一本一道| 国产亚洲人成在线影院| 日韩电影免费在线| 亚洲色最新高清av网站| 无码少妇一区二区浪潮免费| 亚洲人成网站日本片| 在线精品一卡乱码免费| 亚洲色欲www综合网| 99久久免费看国产精品| 亚洲AV无码专区亚洲AV伊甸园| a级午夜毛片免费一区二区| 亚洲精品无码专区在线在线播放| 国产区在线免费观看| 中文字幕精品亚洲无线码一区| 2022国内精品免费福利视频| 久久精品亚洲乱码伦伦中文| 国产成人高清精品免费观看| 久久久久亚洲精品无码网址| 国产三级在线免费观看| 亚洲精品乱码久久久久66| 免费无码av片在线观看| 久久综合图区亚洲综合图区| 人人揉揉香蕉大免费不卡| 久久久久亚洲AV无码专区首| 99re在线这里只有精品免费| 亚洲成人动漫在线观看| 久久久久久国产精品免费免费 | 人禽伦免费交视频播放| 亚洲七七久久精品中文国产|