叶明的javablog

java学习天堂,个人关于其他blog:blog.javaworker.cn,欢迎大家访问
posts - 64, comments - 50, trackbacks - 0, articles - 3

Lucene(2.4.1)技术研究(1)--lucene技术

Posted on 2009-03-27 13:18 天空苍茫 阅读(892) 评论(1)  编辑  收藏 所属分类: java知识
1、lucene是apache下的一个开源框架,主要使用于处理大量资源全文搜索的时间使用的工具。从其官方网站定义为:Apache的Lucene的是一种基于java语言开发的、高性能、跨平台、几乎适用于任何程序的全文搜索引擎。并且apache的Lucenea是完全开源的。当前最新版本是2.4.1。

下边我们首先看一个简单的Lucene的例子。

package com.ikdy.yeming;

import net.paoding.analysis.analyzer.PaodingAnalyzer;

import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocCollector;

public class IndexFileTest {
 
 public static final String INDEX_FILE_PATH = "D:/web/indexFile";
 
 public static void main(String[] args) throws Exception{
  
  
  IndexWriter write = new IndexWriter(INDEX_FILE_PATH,new PaodingAnalyzer(),true,IndexWriter.MaxFieldLength.LIMITED);
  write.setUseCompoundFile(false);
  Document doc = new Document();
  Document doc1 = new Document();
  Document doc2 = new Document();
  Document doc3 = new Document();
  Document doc4 = new Document();
  Document doc5 = new Document();
  Document doc6 = new Document();
  Document doc7 = new Document();
  Document doc8 = new Document();
  
  Field file = new Field("bookname"," 本报感城3月25日电 (记者梁振君 特约记者卞王玉珏)东方市感城镇“3·23”事件今天出现反弹。中午11时半,该镇感城村和宝上村村民各500人左右分别聚集在感恩桥附近,约1小时后双方发生小规模冲突,当场造成3名村民不同程度受伤,其中1名伤者送往医院抢救无效死亡,死者为宝上村村民。当地许多村民痛心地表示,大家同居一地同饮一江水,应该和睦相处。希望双方立即停止对彼此的伤害,不再让悲剧继续发生。",Field.Store.YES,Field.Index.ANALYZED);
  Field file1 = new Field("bookname","从昨天凌晨1时许直至今天中午11时许,经过东方市委、市政府及省公安厅、边防总队等各方努力,感城镇的秩序已趋稳定,事态基本平息。今天上午10时许,海南日报记者驱车来到感城镇政府所在地和感城村,一路上看到载客中巴车、三轮摩托车畅行无阻,镇上的店铺照常开门营业,当地群众坐在道路两侧喝茶闲聊。",Field.Store.YES,Field.Index.ANALYZED);
  Field file2= new Field("bookname","中午11时半左右,一辆感城村的私人小货车在宝上村出口处被该村部分村民拦截并烧毁,由此引发宝上村和感城村重新发生对峙,并造成冲突。幸亏警方及时处置,使得冲突没有扩大化。截至今晚10时许,局面初步得到控制,聚集村民均已散去,警方仍在两村之间巡防",Field.Store.YES,Field.Index.ANALYZED);
  Field file3 = new Field("bookname","“3·23”事件发生后,省委、省政府高度重视,省委书记卫留成、省长罗保铭分别作出重要批示。省委常委、政法委书记肖若海今天下午赶到感城镇现场指挥。事件发生以来,东方市委书记王河山、市长谭灯耀一直坚持在一线指挥,积极会同有关各方想方设法开展稳控工作平息事态。",Field.Store.YES,Field.Index.ANALYZED);
  Field file4 = new Field("bookname","针对事件发展态势,省委政法委、省公安厅、东方市等有关各方在继续组织大批干部进村入户做好涉事村庄村民的思想教育工作,同时采取多种手段对村民开展法制宣传;积极做好死者家属善后工作,并要求医院全力抢救伤者;加大案件侦破力度,同时组织警力做好必要的防控工作。",Field.Store.YES,Field.Index.ANALYZED);
  Field file5 = new Field("bookname","事件发生后,焦作市委专门召开会议,成立调查组对媒体反映的情况进行了全面调查。根据调查结果,焦作市委、市政府严肃处理了相关责任人,并要求畅通渠道,广开言路,接受群众监督,坚持为民创建,科学创建,继续深入开展创建国家卫生城市活动。鉴于此事件已对全国创建卫生城市工作造成不良影响,为保证创建国家卫生城市工作的公正性和严肃性,全国爱卫办决定",Field.Store.YES,Field.Index.ANALYZED);
  Field file6 = new Field("bookname","来到柜台后,“白夹克”声称准备结婚,提出要买一枚1克拉的钻戒。眼看来了大顾客,营业员耐心地为两人挑选钻石。两人先是选中一款11万元的钻戒,随后“白夹克”又看中旁边一颗标价为33万元的裸钻。",Field.Store.YES,Field.Index.ANALYZED);
  Field file7 = new Field("bookname","“黑西装”直奔克拉厅的柜台前,称要买之前看中的33万元的裸钻。得知是前一天预约的顾客后,营业员顿时兴高采烈地拿出了裸钻。“黑西装”取出了自带的放大镜,还拿出了一个镊子,仔细观察钻石的成色。大约10分钟后,“黑西装”查看结束,将裸钻还给营业员,表示十分满意,提出1小时后来取货。在“黑西装”查看裸钻的时候,“白夹克”并未凑过来,而是在旁边挑选其他饰品。",Field.Store.YES,Field.Index.ANALYZED);
  Field file8 = new Field("bookname","24日早晨,民警追查到,这3人目前正住在闵行区金汇路颐美庭园酒店内。当天下午3点半左右,民警在306房间内将“黑西装”李银林和“白夹克”万尧荣等3人抓获。此时距离钻石被盗仅24个小时。经审问,李银林在拿镊子查看裸钻时,曾利用营业员低头的一刹那,伸手摸了摸自己的裤子口袋———短短几秒钟的时间,他便完成了调包。",Field.Store.YES,Field.Index.ANALYZED);

  
  doc.add(file);
  doc1.add(file1);
  doc2.add(file2);
  doc3.add(file3);
  doc4.add(file4);
  doc5.add(file5);
  doc6.add(file6);
  doc7.add(file7);
  doc8.add(file8);
  
  write.addDocument(doc);
  write.addDocument(doc1);
  write.addDocument(doc2);
  write.addDocument(doc3);
  write.addDocument(doc4);
  write.addDocument(doc5);
  write.addDocument(doc6);
  write.addDocument(doc7);
  write.addDocument(doc8);
  
  write.close();
  
  
  try {
   
   IndexReader reader = IndexReader.open(INDEX_FILE_PATH);
   
   IndexSearcher search = new IndexSearcher(reader);
   
   QueryParser parser = new QueryParser("bookname", new PaodingAnalyzer());
   
   Query query =parser.parse("“黑西装”");
   
   TopDocCollector collector = new TopDocCollector(10);  
   search.search(query,collector);
      ScoreDoc[] hits = collector.topDocs().scoreDocs;
      int numTotalHits = collector.getTotalHits();
      System.out.println("所有的暂时:"+numTotalHits);
      //int start=1;
     // int sEnd=3;
      for(int i=0;i<numTotalHits;i++){
       doc = search.doc(hits[i].doc);
       System.out.println(doc);
      }
   
   /*Hits hit = search.search(query);
   for(int i=0;i<hit.length();i++){
    System.out.println(hit.doc(i));
   }*/
  } catch (Exception e) {
   e.printStackTrace();
  }
  
 }

}

所有的暂时:2
Document<stored/uncompressed,indexed,tokenized<bookname:“黑西装”直奔克拉厅的柜台前,称要买之前看中的33万元的裸钻。得知是前一天预约的顾客后,营业员顿时兴高采烈地拿出了裸钻。“黑西装”取出了自带的放大镜,还拿出了一个镊子,仔细观察钻石的成色。大约10分钟后,“黑西装”查看结束,将裸钻还给营业员,表示十分满意,提出1小时后来取货。在“黑西装”查看裸钻的时候,“白夹克”并未凑过来,而是在旁边挑选其他饰品。>>
Document<stored/uncompressed,indexed,tokenized<bookname:24日早晨,民警追查到,这3人目前正住在闵行区金汇路颐美庭园酒店内。当天下午3点半左右,民警在306房间内将“黑西装”李银林和“白夹克”万尧荣等3人抓获。此时距离钻石被盗仅24个小时。经审问,李银林在拿镊子查看裸钻时,曾利用营业员低头的一刹那,伸手摸了摸自己的裤子口袋———短短几秒钟的时间,他便完成了调包。>>

注释:本文使用的中文分词:庖丁解牛(我将在下一篇日志中去分析)

Feedback

# re: Lucene(2.4.1)技术研究(1)--lucene技术  回复  更多评论   

2009-04-16 23:40 by 心梦帆影
嗯,不错不错.支持一下.很想学一下这个Lucene.

只有注册用户登录后才能发表评论。


网站导航: