Rising Sun

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            148 隨筆 :: 0 文章 :: 22 評論 :: 0 Trackbacks

          在學(xué)lucene 之初看了許多書,都是走馬觀花,沒有項目的驅(qū)動下,來一個用例demo感覺也不是很難,“我會了”這是我的第一感覺。

                   2013年底公司接到一個項目用到lucene,這是我第一次正真接觸Lucene,代碼比較老3.6版本,不適合新項目的需求(空間查詢)。于是下載了最新版本 4.51,有帶“空間查詢”模塊。各大搜索引擎都沒有找到像樣例子,于是想到了lucene svn trunk目錄測試用例中找到了測試例子,開始了一段lucene之旅。

           

          寫數(shù)據(jù),創(chuàng)建IndexWriter,通過它的構(gòu)造函數(shù)需要一個索引目錄(Diectory)和索引寫入配置項(InderWriterConfig,直接上代碼:

          //設(shè)置寫入目錄(好幾種呵呵)

          Directory d=FSDirectory.open(new File("D:/luceneTest"));

          //設(shè)置分詞 StandardAnalyzer(會把句子中的字單個分詞)

          Analyzer analyzer= new StandardAnalyzer(Version.LUCENE_45);

          //設(shè)置索引寫入配置

          IndexWriterConfig config=new IndexWriterConfig(Version.LUCENE_45,analyzer);

          //設(shè)置創(chuàng)建模式

          //config.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND);

          IndexWriter indexwriter= new IndexWriter(d,config);

           

              上面四行代碼就創(chuàng)建好了indexwriter下面把數(shù)據(jù)填入就好了,寫入有多種方式如下圖:


                   addDocment 舉例代碼如下:

          Document doc=new Document(); 

                  doc.add(new StringField("id", "1", Store.YES));

                  doc.add(new StringField("name", "brockhong", Store.YES));

                  doc.add(new TextField("content", "lucene 文檔第一次寫看著給分吧", Store.YES)); 

          //寫入數(shù)據(jù)

          indexwriter.addDocument(doc);

          //提交

          indexwriter.commit();

          Luke 工具查看Text列,這是標準分詞惹的禍哦!寫入成功。


                   讀數(shù)據(jù)查詢,創(chuàng)建 IndexSearcher 構(gòu)造函數(shù)設(shè)置indexReader ,輸入查詢條件,上面content字段數(shù)據(jù)設(shè)置了分詞,所以必須通過查詢解析類QueryParser設(shè)定分詞字段、版本、分詞模式,并通過parse方法得到查詢條件。代碼如下:       

           //讀數(shù)據(jù)

           //創(chuàng)建 indexReader 這個已過時 IndexReader.open(d),里面的代碼一樣可能為了兼容老版本

           IndexReader indexReader = DirectoryReader.open(d);

           IndexSearcher indexSearcher = new IndexSearcher(indexReader);

          //查詢 設(shè)置分詞字段

          QueryParser queryParser = new QueryParser(Version.LUCENE_45, "content",

                             new StandardAnalyzer(Version.LUCENE_45));

           //or 關(guān)系 “給”、“分”

                   queryParser.setDefaultOperator(QueryParser.OR_OPERATOR);

          Query query = queryParser.parse("給分");

           

          TopDocs results = indexSearcher.search(query, 100);

          int numTotalHits = results.totalHits;

          System.out.println(" " + numTotalHits + " 完全匹配的文檔");

          ScoreDoc[] hits = results.scoreDocs;

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

                        Document document = indexSearcher.doc(hits[i].doc);

                        System.out.println("content:" + document.get("content"));

          }


          pasting
          posted on 2014-12-31 17:07 brock 閱讀(342) 評論(0)  編輯  收藏 所屬分類: Lucene

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 定陶县| 建阳市| 卢湾区| 巩留县| 海门市| 洪洞县| 博客| 绩溪县| 弥渡县| 垣曲县| 济阳县| 龙陵县| 唐海县| 建瓯市| 合山市| 永胜县| 墨竹工卡县| 建德市| 友谊县| 灵璧县| 芮城县| 东乡族自治县| 抚宁县| 图木舒克市| 崇文区| 南溪县| 上蔡县| 遂川县| 石林| 苗栗县| 九江市| 台北市| 武汉市| 景泰县| 成都市| 阿巴嘎旗| 广东省| 和硕县| 保德县| 蚌埠市| 确山县|