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

          我用的是lucene2.2.0,

          最近要做一個(gè)站內(nèi)的全文檢索功能,下面把實(shí)現(xiàn)的代碼貼出來(lái),實(shí)現(xiàn)了索引的創(chuàng)建、檢索和刪除功能,并可以從檢索結(jié)果去查詢數(shù)據(jù)庫(kù)~ .我主要是我系統(tǒng)的700W數(shù)據(jù)進(jìn)行檢索.下面主要是供應(yīng)信息做為例子,(如有問(wèn)題,多多評(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)鍵字來(lái)搜索
             QueryParser qa=new QueryParser("clcontent",new StandardAnalyzer());
             Query query=qa.parse(keyword);
          //這里指定條件都滿足搜索
             bquery.add(query,org.apache.lucene.search.BooleanClause.Occur.MUST);
          //   vcareacode作為條件來(lái)查詢,如果為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")顯示類別
          這樣就可以從建索引,到搜索.(有問(wèn)題,發(fā)表下評(píng)論,我會(huì)回的)這只是簡(jiǎn)單的,我也在苦研中,要睡了,還要上班,有時(shí)間會(huì)寫下更新索引,增加,刪除,修改,還有一些優(yōu)化方法..
                                                                                                                                                                                         青菜貓(孫宇)

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


          FeedBack:
          # re: 青菜貓lucene2.2.0全文檢索
          2007-10-25 08:53 | 阿蜜果
          lucene我列入學(xué)習(xí)計(jì)劃已經(jīng)很久,但一直沒(méi)有開(kāi)始動(dòng)手學(xué)習(xí),關(guān)注你的這個(gè)系列  回復(fù)  更多評(píng)論
            
          # re: 青菜貓lucene2.2.0全文檢索
          2007-10-25 09:04 | sundc
          阿蜜果姐姐都來(lái)了....呵呵...  回復(fù)  更多評(píng)論
            
          # re: 青菜貓lucene2.2.0全文檢索
          2007-10-25 14:16 | 五街
          寫的很好啊,你是杭州的嗎
          看到你的代碼,跟我們公司在用的好像  回復(fù)  更多評(píng)論
            
          # re: 青菜貓lucene2.2.0全文檢索[未登錄](méi)
          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>自古誰(shuí)無(wú)死,留取丹心照汗青

          我在JSP中顯示的也是和這個(gè)一樣的.沒(méi)有看到有紅色加粗的效果,這是為什么,能
          把原因發(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í)候沒(méi)有碰到內(nèi)存溢出的問(wèn)題嘛!急待解決!  回復(fù)  更多評(píng)論
            
          # re: 青菜貓lucene2.2.0全文檢索
          2008-07-16 14:51 | 小雨轉(zhuǎn)晴
          是沒(méi)看到 落個(gè)字  回復(fù)  更多評(píng)論
            
          # re: 青菜貓lucene2.2.0全文檢索
          2008-07-17 08:54 | 青菜貓
          @小雨轉(zhuǎn)晴
          我沒(méi)有碰到過(guò),最好在建索引的時(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)大量用戶訪問(wèn)系統(tǒng)時(shí),就會(huì)看到系統(tǒng)內(nèi)存直線增長(zhǎng),致使產(chǎn)生

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

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

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


          網(wǎng)站導(dǎo)航:
           
          <2007年10月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

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

          常用鏈接

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          青菜貓(孫宇博客),青菜貓(孫宇博客),青菜貓(孫宇博客)http://www.javasdc.cn/
          主站蜘蛛池模板: 鹿邑县| 乌苏市| 温宿县| 通化市| 阳山县| 宁都县| 垫江县| 文水县| 进贤县| 勃利县| 广汉市| 贺州市| 阳东县| 白城市| 余干县| 收藏| 友谊县| 额敏县| 宣恩县| 望奎县| 定边县| 三门县| 怀宁县| 汉源县| 娱乐| 铜梁县| 闻喜县| 阳山县| 德阳市| 额敏县| 张家口市| 南丹县| 顺昌县| 开阳县| 曲松县| 泾源县| 塔城市| 从江县| 康定县| 汝阳县| 娄底市|