Lucene 3.5学习

1.建立索引
File indexDir=new File("E:\\Index\\");
		
		Analyzer luceneAnalyzer=new StandardAnalyzer(Version.LUCENE_35);
		
		IndexWriter indexWriter=null;
		
		try {
			
			IndexWriterConfig indexWriterConfig=new IndexWriterConfig(Version.LUCENE_35,luceneAnalyzer);
			
			indexWriter=new IndexWriter(SimpleFSDirectory.open(indexDir),indexWriterConfig);
			
			Field f1=new Field("name","",Field.Store.YES,Field.Index.ANALYZED);
			
			Field f2=new Field("address","",Field.Store.YES,Field.Index.ANALYZED);
			
			ResultSet rs=getResultSet("select * from authors");
			
			while(rs.next())
			{
				Document doc=new Document();
				f1.setValue(rs.getString(2));
				
				System.out.println(rs.getString(2));
				
				doc.add(f1);
				
				f2.setValue(rs.getString(4));
				doc.add(f2);
				
				System.out.println(rs.getString(4));
				
				indexWriter.addDocument(doc);
			}
			
			System.out.println("DocNum:"+indexWriter.numDocs());
			
			indexWriter.commit();			
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		finally
		{
			try {
				
				indexWriter.close();
				
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}


Field.Store.YES或者NO(存储域选项)

设置为YES表示或把这个域中的内容完全存储到文件中,方便进行文本的还原

设置为NO表示把这个域的内容不存储到文件中,但是可以被索引,此时内容无法完全 还原(doc.get是为null)

Field.Index(索引选项)

Index.ANALYZED:进行分词和索引,适用于标题、内容等

Index.NOT_ANALYZED:进行索引,但是不进行分词,如果身份证号,姓名,ID等,适 用于精确搜索

Index.ANALYZED_NOT_NORMS:进行分词但是不存储norms信息,这个norms中包括 了创建索引的时间和权值等信息

Index.NOT_ANALYZED_NOT_NORMS:即不进行分词也不存储norms信息

Index.NO:不进行索引


2.查找索引
IndexSearcher indexSearcher=null;
		
		String [] queryFileds = {"name","address"};
		
		try {
			
			Directory dir=new SimpleFSDirectory(new File("E:\\Index"));
			
			indexSearcher=new IndexSearcher(IndexReader.open(dir));
			
			QueryParser queryParser=new MultiFieldQueryParser(Version.LUCENE_35,queryFileds,new StandardAnalyzer(Version.LUCENE_35));
			
			String key="宁";
			
			Query query=queryParser.parse(key);
						
			TopDocs topDocs=indexSearcher.search(query,10);
			
			System.out.println("Total:"+topDocs.totalHits);
			
			for(ScoreDoc scoreDoc:topDocs.scoreDocs)
			{
				Document doc=indexSearcher.doc(scoreDoc.doc);
				System.out.println(doc.get("name"));
				System.out.println(doc.get("address"));
			}
			
			indexSearcher.close();
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}

猜你喜欢

转载自wanjuncn.iteye.com/blog/1565677