青菜猫lucene2.2.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")显示类别
这样就可以从建索引,到搜索.(有问题,发表下评论,我会回的)这只是简单的,我也在苦研中,要睡了,还要上班,有时间会写下更新索引,增加,删除,修改,还有一些优化方法..

 

出自http://www.blogjava.net/sundc/archive/2008/07/17/155129.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值