青菜貓(孫宇博客),青菜貓(孫宇博客),青菜貓(孫宇博客)http://www.javasdc.cn/
          posts - 29,  comments - 63,  trackbacks - 0

          我用的是lucene2.2.0,

          最近要做一個(gè)站內(nèi)的全文檢索功能,下面把實(shí)現(xiàn)的代碼貼出來,實(shí)現(xiàn)了索引的創(chuàng)建、檢索和刪除功能,并可以從檢索結(jié)果去查詢數(shù)據(jù)庫(kù)~ .我主要是我系統(tǒng)的700W數(shù)據(jù)進(jìn)行檢索.下面主要是供應(yīng)信息做為例子,(如有問題,多多評(píng)論,虛心接受).

           // 創(chuàng)建索引

          IndexWriter writer;
             String indexDir = "d:""index/sellindex";
             boolean indexExist = indexExist(indexDir);
             if (indexExist) {
              writer = new IndexWriter(indexDir, new StandardAnalyzer(),
                false);
             } else {

              writer = new IndexWriter(indexDir, new StandardAnalyzer(), true);
             }
          re為數(shù)據(jù)記錄集,這里就不介紹了.
          while (re.next()) {
          //Field.Store.YES表示是不是被保存,
          //Field.Index.no表示是不是被索引.
          doc.add(new Field("vcsid", re.getString("vcsid"),
                Field.Store.YES, Field.Index.no));
          //vcareacode是我的地區(qū)編號(hào),因?yàn)槲宜阉饕鳛闂l件搜索.
           doc.add(new Field("vcareacode", re.getString("vcareacode"),
                 Field.Store.YES, Field.Index.TOKENIZED));
          //這里isort后面排序用的
          doc.add(new Field("isort", re.getString("isort"),
                 Field.Store.YES, Field.Index.TOKENIZED));
          //clcontent是我的內(nèi)容,因?yàn)槲宜阉饕鳛闂l件搜索.
          doc.add(new Field("clcontent", re.getString("clcontent"),
                 Field.Store.YES, Field.Index.TOKENIZED));
          writer.addDocument(doc);
          }
          如果記錄較多時(shí),就循環(huán)添加
          最后
          writer.close();
          判斷索引存在方法
          public static boolean indexExist(String indexDir) {
            return IndexReader.indexExists(indexDir);
           }
          這樣就在索引就建好了.

           // 索引搜索的實(shí)現(xiàn)(我這里已搜索內(nèi)容和地區(qū))

           IndexSearcher indexSearcher;
          ndexSearcher = new IndexSearcher("d:""index/sellindex");
             Document doc = null;
             org.apache.lucene.search.BooleanQuery  bquery=new org.apache.lucene.search.BooleanQuery();
          //我這里clcontent作為關(guān)鍵字來搜索
             QueryParser qa=new QueryParser("clcontent",new StandardAnalyzer());
             Query query=qa.parse(keyword);
          //這里指定條件都滿足搜索
             bquery.add(query,org.apache.lucene.search.BooleanClause.Occur.MUST);
          //   vcareacode作為條件來查詢,如果為NULL和 AA時(shí)表示查找所有的
             if(request.getParameter("vcareacode")!=null){
              if(!request.getParameter("vcareacode").toString().equals("aa")){      
                 qa=new QueryParser("vcareacode",new StandardAnalyzer());
                query=qa.parse(request.getParameter("vcareacode")+"*");
                bquery.add(query,org.apache.lucene.search.BooleanClause.Occur.MUST);
                vcareacode=request.getParameter("vcareacode");
               }
            }"
          //這里加的是高亮結(jié)果顯示
           Highlighter highlighter = new Highlighter(new SimpleHTMLFormatter("<font color=red><B>","</B></font>"),new QueryScorer(bquery));
              highlighter.setTextFragmenter(new SimpleFragmenter(80));
           org.apache.lucene.document.Document dc=null;
           Hits hits = indexSearcher.search(bquery,new Sort(new SortField("isort",true)));
            org.apache.lucene.analysis.standard.StandardAnalyzer analyzer = new org.apache.lucene.analysis.standard.StandardAnalyzer();
          //這里hits.length()可以得到有多少記錄.,I表示第幾條記錄
           dc = hits .doc(i);
          //高亮顯示類容
            org.apache.lucene.analysis.TokenStream  tokenStream = analyzer.tokenStream("clcontent", new java.io.StringReader(dc.get("clcontent")));
          System.out.pritf(highlighter.getBestFragment(tokenStream,li.doc(i).get("clcontent")))  ;
          dc.get("vcareacode")顯示類別
          這樣就可以從建索引,到搜索.(有問題,發(fā)表下評(píng)論,我會(huì)回的)這只是簡(jiǎn)單的,我也在苦研中,要睡了,還要上班,有時(shí)間會(huì)寫下更新索引,增加,刪除,修改,還有一些優(yōu)化方法..
                                                                                                                                                                                         青菜貓(孫宇)

          posted on 2007-10-22 23:33 青菜貓(孫宇) 閱讀(1527) 評(píng)論(11)  編輯  收藏 所屬分類: 搜索


          FeedBack:
          # re: 青菜貓lucene2.2.0全文檢索
          2007-10-25 08:53 | 阿蜜果
          lucene我列入學(xué)習(xí)計(jì)劃已經(jīng)很久,但一直沒有開始動(dòng)手學(xué)習(xí),關(guān)注你的這個(gè)系列  回復(fù)  更多評(píng)論
            
          # re: 青菜貓lucene2.2.0全文檢索
          2007-10-25 09:04 | sundc
          阿蜜果姐姐都來了....呵呵...  回復(fù)  更多評(píng)論
            
          # re: 青菜貓lucene2.2.0全文檢索
          2007-10-25 14:16 | 五街
          寫的很好啊,你是杭州的嗎
          看到你的代碼,跟我們公司在用的好像  回復(fù)  更多評(píng)論
            
          # re: 青菜貓lucene2.2.0全文檢索[未登錄]
          2007-11-01 11:50 | lk
          不錯(cuò)  回復(fù)  更多評(píng)論
            
          # re: 青菜貓lucene2.2.0全文檢索
          2007-11-02 15:33 | why
          為什么高亮顯示的時(shí)候看不到效果,:
          比如我找"人生".出現(xiàn)如下:

          <font color="red"><b>人</b></font><font color="red"><b>生</b></font>自古誰無死,留取丹心照汗青

          我在JSP中顯示的也是和這個(gè)一樣的.沒有看到有紅色加粗的效果,這是為什么,能
          把原因發(fā)到我郵箱嗎. jiangguoyu2006@163.com 不勝感激  回復(fù)  更多評(píng)論
            
          # re: 青菜貓lucene2.2.0全文檢索
          2007-11-03 16:04 | sundc
          @why
          在顯示的時(shí)候你CODE加了org.apache.lucene.analysis.standard.StandardAnalyzer analyzer = new org.apache.lucene.analysis.standard.StandardAnalyzer();
          org.apache.lucene.analysis.TokenStream tokenStream = analyzer.tokenStream("你的字段", new java.io.StringReader(dc.get("你的字段")));
          highlighter.getBestFragment(tokenStream,li.doc(i).get("你的字段"))  回復(fù)  更多評(píng)論
            
          # re: 青菜貓lucene2.2.0全文檢索
          2008-07-15 15:15 | 小雨轉(zhuǎn)晴
          青菜貓 謝謝你的回帖 我在思考....  回復(fù)  更多評(píng)論
            
          # re: 青菜貓lucene2.2.0全文檢索
          2008-07-16 14:51 | 小雨轉(zhuǎn)晴
          小貓
          你寫的優(yōu)化我看到啊,再有你循環(huán)添加的時(shí)候沒有碰到內(nèi)存溢出的問題嘛!急待解決!  回復(fù)  更多評(píng)論
            
          # re: 青菜貓lucene2.2.0全文檢索
          2008-07-16 14:51 | 小雨轉(zhuǎn)晴
          是沒看到 落個(gè)字  回復(fù)  更多評(píng)論
            
          # re: 青菜貓lucene2.2.0全文檢索
          2008-07-17 08:54 | 青菜貓
          @小雨轉(zhuǎn)晴
          我沒有碰到過,最好在建索引的時(shí)候,各更新的時(shí)間把內(nèi)存設(shè)置大一點(diǎn)...  回復(fù)  更多評(píng)論
            
          # re: 青菜貓lucene2.2.0全文檢索
          2008-12-26 16:05 | wide
          關(guān)鍵字:lucene.net 搜索排序 內(nèi)存猛漲 內(nèi)存溢出 IndexSearcher TopDocs weight

          public IndexSearcher(String path) throws IOException ...{
          this(IndexReader.open(path), true);
          }

          public IndexSearcher(Directory directory) throws IOException ...{
          this(IndexReader.open(directory), true);
          }

          public IndexSearcher(IndexReader r) ...{
          this(r, false);
          }

          private IndexSearcher(IndexReader r, boolean closeReader) ...{
          reader = r;
          this.closeReader = closeReader;
          }

          在lucene應(yīng)用中也許很多人都遇到這種情況。當(dāng)索引太大(大于10G),搜索時(shí)用前兩種構(gòu)造方法聲明IndexSearcher

          對(duì)象,這樣每構(gòu)造一個(gè)IndexSearcher對(duì)象,都要聲明一個(gè)索引對(duì)象(實(shí)際上是一個(gè)索引的多次連接),而每個(gè)索引對(duì)

          象都要占用一定量的系統(tǒng)資源(主要是內(nèi)存)。當(dāng)大量用戶訪問系統(tǒng)時(shí),就會(huì)看到系統(tǒng)內(nèi)存直線增長(zhǎng),致使產(chǎn)生

          “java heap space”內(nèi)存耗盡或內(nèi)存溢出(.net)。這個(gè)問題可以通過以下方法解決:

          終極解決方法:
          聯(lián)系方式: jackbison@163.com , pc2004lcq@126.com  回復(fù)  更多評(píng)論
            

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


          網(wǎng)站導(dǎo)航:
           
          <2007年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          青菜貓(孫宇)結(jié)交天下朋友,在網(wǎng)上吸取知識(shí)..

          常用鏈接

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          青菜貓(孫宇博客),青菜貓(孫宇博客),青菜貓(孫宇博客)http://www.javasdc.cn/
          主站蜘蛛池模板: 沐川县| 张家港市| 湾仔区| 鸡东县| 昭苏县| 舟曲县| 革吉县| 绥滨县| 青神县| 海阳市| 尚义县| 铁岭市| 洱源县| 上饶市| 郁南县| 洪雅县| 临城县| 佳木斯市| 普安县| 昌平区| 凤山市| 肥乡县| 林芝县| 奉节县| 德阳市| 辉县市| 大田县| 新泰市| 阜阳市| 枣强县| 宣汉县| 宿州市| 彰化县| 平远县| 铅山县| 阳山县| 沙湾县| 枣阳市| 泸定县| 达日县| 杨浦区|