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

          我用的是lucene2.2.0,

          最近要做一個站內的全文檢索功能,下面把實現的代碼貼出來,實現了索引的創建、檢索和刪除功能,并可以從檢索結果去查詢數據庫~ .我主要是我系統的700W數據進行檢索.下面主要是供應信息做為例子,(如有問題,多多評論,虛心接受).

           // 創建索引

          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為數據記錄集,這里就不介紹了.
          while (re.next()) {
          //Field.Store.YES表示是不是被保存,
          //Field.Index.no表示是不是被索引.
          doc.add(new Field("vcsid", re.getString("vcsid"),
                Field.Store.YES, Field.Index.no));
          //vcareacode是我的地區編號,因為我搜索要作為條件搜索.
           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是我的內容,因為我搜索要作為條件搜索.
          doc.add(new Field("clcontent", re.getString("clcontent"),
                 Field.Store.YES, Field.Index.TOKENIZED));
          writer.addDocument(doc);
          }
          如果記錄較多時,就循環添加
          最后
          writer.close();
          判斷索引存在方法
          public static boolean indexExist(String indexDir) {
            return IndexReader.indexExists(indexDir);
           }
          這樣就在索引就建好了.

           // 索引搜索的實現(我這里已搜索內容和地區)

           IndexSearcher indexSearcher;
          ndexSearcher = new IndexSearcher("d:""index/sellindex");
             Document doc = null;
             org.apache.lucene.search.BooleanQuery  bquery=new org.apache.lucene.search.BooleanQuery();
          //我這里clcontent作為關鍵字來搜索
             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時表示查找所有的
             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");
               }
            }"
          //這里加的是高亮結果顯示
           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")顯示類別
          這樣就可以從建索引,到搜索.(有問題,發表下評論,我會回的)這只是簡單的,我也在苦研中,要睡了,還要上班,有時間會寫下更新索引,增加,刪除,修改,還有一些優化方法..
                                                                                                                                                                                         青菜貓(孫宇)

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


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

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

          我在JSP中顯示的也是和這個一樣的.沒有看到有紅色加粗的效果,這是為什么,能
          把原因發到我郵箱嗎. jiangguoyu2006@163.com 不勝感激  回復  更多評論
            
          # re: 青菜貓lucene2.2.0全文檢索
          2007-11-03 16:04 | sundc
          @why
          在顯示的時候你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("你的字段"))  回復  更多評論
            
          # re: 青菜貓lucene2.2.0全文檢索
          2008-07-15 15:15 | 小雨轉晴
          青菜貓 謝謝你的回帖 我在思考....  回復  更多評論
            
          # re: 青菜貓lucene2.2.0全文檢索
          2008-07-16 14:51 | 小雨轉晴
          小貓
          你寫的優化我看到啊,再有你循環添加的時候沒有碰到內存溢出的問題嘛!急待解決!  回復  更多評論
            
          # re: 青菜貓lucene2.2.0全文檢索
          2008-07-16 14:51 | 小雨轉晴
          是沒看到 落個字  回復  更多評論
            
          # re: 青菜貓lucene2.2.0全文檢索
          2008-07-17 08:54 | 青菜貓
          @小雨轉晴
          我沒有碰到過,最好在建索引的時候,各更新的時間把內存設置大一點...  回復  更多評論
            
          # re: 青菜貓lucene2.2.0全文檢索
          2008-12-26 16:05 | wide
          關鍵字:lucene.net 搜索排序 內存猛漲 內存溢出 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應用中也許很多人都遇到這種情況。當索引太大(大于10G),搜索時用前兩種構造方法聲明IndexSearcher

          對象,這樣每構造一個IndexSearcher對象,都要聲明一個索引對象(實際上是一個索引的多次連接),而每個索引對

          象都要占用一定量的系統資源(主要是內存)。當大量用戶訪問系統時,就會看到系統內存直線增長,致使產生

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

          終極解決方法:
          聯系方式: jackbison@163.com , pc2004lcq@126.com  回復  更多評論
            
          <2007年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          青菜貓(孫宇)結交天下朋友,在網上吸取知識..

          常用鏈接

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          青菜貓(孫宇博客),青菜貓(孫宇博客),青菜貓(孫宇博客)http://www.javasdc.cn/
          主站蜘蛛池模板: 辽源市| 承德县| 枣庄市| 平罗县| 象山县| 百色市| 辉县市| 阳春市| 沂源县| 东丰县| 库伦旗| 柳林县| 读书| 安泽县| 额尔古纳市| 日照市| 寻甸| 慈溪市| 淳化县| 苍梧县| 平定县| 含山县| 高陵县| 额敏县| 苏尼特右旗| 华蓥市| 轮台县| 江山市| 桃源县| 双桥区| 屏东县| 横峰县| 康定县| 资源县| 黄陵县| 临澧县| 宁陵县| 青田县| 墨玉县| 大姚县| 海伦市|