lucene小练一__索引(想学点Lucene了)

文件放在F:/lucene/lucenes

package org.lucene;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
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.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.util.Version;
   public class demo {
		
		/*
		 * 创建索引
		 */
		 IndexWriter writer =null;
		public void index()
		{
	          try {
	      	      //创建directory
	          		Directory directory=FSDirectory.open(new File("f:/lucene/Index01"));
	    		   // Directory directory=new RAMDirectory();//建立在内存中
	          		//创建IndexWriter
	          		IndexWriterConfig iwc=new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35));
	          	   
	      	    	writer=new IndexWriter(directory, iwc);
	      	    	 //创建document对象
	      	    	Document doc=null;
	      	    	 //为document添加field
	      	        File f=new File("f:/lucene/lucenes");
	      	          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));
						  //通过IndexWriter将document添加到索引中
						  writer.addDocument(doc);
					 }
				 
				}catch (CorruptIndexException e) {
					e.printStackTrace();
					// TODO: handle exception
				}catch (LockObtainFailedException e) {
					e.printStackTrace();
					// TODO: handle exception
				}catch (IOException e) {
					e.printStackTrace();
					// TODO: handle exception
				}finally{
			      try {
					if(writer!=null)
						writer.close();
					 
				    }catch (CorruptIndexException e2) {
						e2.printStackTrace();
						// TODO: handle exception
					}catch (IOException e2) {
						e2.printStackTrace();
						// TODO: handle exception
					}
				}
	     }
		
		
		/*
		 * 创建索引
		 */
		
		public void serch()
		{
		    try {
		    	//1.创建Directory
				Directory directory=FSDirectory.open(new File("f:/lucene/Index01"));
				
				//2.创建IndexReader
				IndexReader  reader=IndexReader.open(directory);
				
				//3.根据IndexReader创建IndexSercher
				IndexSearcher sercher=new IndexSearcher(reader);
				
				//4.创建搜索的Quary
				//创建parse来确定搜索文件的内容,第二个参数是搜索的域
				QueryParser parser=new QueryParser(Version.LUCENE_35,"content",new StandardAnalyzer(Version.LUCENE_35));
				//创建quary,表示搜索域为content包含name的内容
				Query quary=parser.parse("ask");
				
				//5.根据色弱sercher搜索并返回TopDocs
				TopDocs tds=sercher.search(quary, 10);//10表示显示10条搜索结果
				
				//6.根据TopDocs获取ScoreDoc对象
				ScoreDoc[] sds=tds.scoreDocs;
				for (ScoreDoc sd:sds) {
					//7.根据sercher对象和Scoredoc对象获取Document对象
					Document d=sercher.doc(sd.doc); 
					//8.根据Document对象获取需要的值
					System.out.println(d.get("filename")+"["+d.get("path")+"]");
				}
				//9.关闭reader
				reader.close();
			} catch (Exception e) {
				e.printStackTrace();  
				// TODO: handle exception
			}
			
		}
		
	}
测试类
package org.lucene;

import java.io.File;
import java.io.IOException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.junit.*;

public class TestLucene {
	
	
	@Test
	public void testIndex()
	{
		demo d=new demo();
		d.index();
	}
	@Test
	public void testSercher()
	{
		demo d=new demo();
		d.serch();
	}
	
	/*public void check() throws IOException{						//检查索引是否被正确建立(打印索引)
		Directory directory = FSDirectory.open(new File("f:/lucene/Index01/"));//创建directory,其储存方式为在
		IndexReader reader = IndexReader.open(directory);
		for(int i = 0;i<reader.numDocs();i++){
			System.out.println(reader.document(i));
		}
		reader.close();
	}*/
	public static void main(String[] args) {
		new TestLucene().testIndex();
			new TestLucene().testSercher();
			}

}
 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值