Lucene的使用

在全文索引工具中,由以下3个部分组成:

     1、索引部分

     2、分词部分

     3、搜索部分

 

一、创建索引

/**
	 * 建立索引
	 */
	public void index(){
		IndexWriter writer=null;
		try {
			//1、创建Directory
//			Directory directory=new RAMDirectory();//创建在内存中
			Directory directory=FSDirectory.open(new File("E:/luceneWorkspace/test/index01"));//创建在硬盘上
			//2、创建IndexWriter
			IndexWriterConfig iwc=new IndexWriterConfig(Version.LUCENE_36, new StandardAnalyzer(Version.LUCENE_36));
			writer=new IndexWriter(directory, iwc);
			//3、创建Document对象
			Document doc=null;
			//4、为Document添加Field
			File f=new File("E:/luceneWorkspace/test/example");
			for(File file:f.listFiles()){
				doc=new Document();
				doc.add(new Field("content",new FileReader(file)));
				doc.add(new Field("filename",file.getName(),Field.Store.YES,Field.Index.NOT_ANALYZED));
				doc.add(new Field("path",file.getAbsolutePath(),Field.Store.YES,Field.Index.NOT_ANALYZED));
				//5、通过IndexWriter添加问
				writer.addDocument(doc);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(writer!=null){
				try {
					writer.close();
				} catch (CorruptIndexException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

 

二、搜索

/**
	 * 搜索
	 */
	public void searcher(){
		try {
			//1、创建Directory
			Directory directory=FSDirectory.open(new File("E:/luceneWorkspace/test/index01"));
			//2、创建IndexReader
			IndexReader reader=IndexReader.open(directory);
			//3、根据IndexReader创建IndexSearcher
			IndexSearcher searcher=new IndexSearcher(reader);
			//4、创建搜索的Query
			//创建parser来确定要搜索文件的内容,第二个参数表示搜索的域
			QueryParser parser=new QueryParser(Version.LUCENE_36, "content", new StandardAnalyzer(Version.LUCENE_36));
			//创建query,表示搜索喻为content中包含java的文档
			Query query=parser.parse("permissions");
			//5、根据searcher搜索并且返回TopDocs   10表示10条数据
			TopDocs tds=searcher.search(query, 10);
			//6、根据TopDocs获取ScoreDoc
			ScoreDoc[] sds=tds.scoreDocs;
			for (ScoreDoc scoreDoc : sds) {
				//7、根据searcher和ScoreDoc对象获取具体Document对象
				Document d=searcher.doc(scoreDoc.doc);
				//8、根据Document对象获取需要的值
				System.out.println(d.get("filename")+"-------"+d.get("path"));
			}
			//9、关闭reader
			reader.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}


 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值