`

Lucene 3.5 代码片段

 
阅读更多

创建index

/**<p>描述:使用最新版Lucene3.5.0的代码示例。</p><p>功能:搜索指定文件夹下的html文件,创建索引。</p>
	 * V Lucene 3.5
	 * 创建索引
	 */
	public static void createIndex(){
		File indexDir = new File(LUCENEINDEX);
		File dataDir = new File(LUCENEDATA);
		
		Analyzer luceneAnalyzer = new StandardAnalyzer(Version.LUCENE_35);
		File[] dataFiles = indexDir.listFiles();
		
		IndexWriter indexWriter = null;
		try {
			/**
			 * indexWriter	= new IndexWriter(SimpleFSDirectory.open(dataDir),luceneAnalyzer, true,IndexWriter.MaxFieldLength.LIMITED);
			 * 在最新版中这种方式已被不使用。
			 * 现在使用下面的方式创建indexWriter
			 */
			IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_35, luceneAnalyzer);
			indexWriter	= new IndexWriter(SimpleFSDirectory.open(dataDir), indexWriterConfig);
			long startTime = new Date().getTime();
			//注意:filed实例在多次添加的时候可以重用,节约构造field实例的时间。
            Field f1 = new Field("name", "", Field.Store.YES, Field.Index.NOT_ANALYZED) ;
            Field f2 = new Field("path", "", Field.Store.YES, Field.Index.NOT_ANALYZED) ;
            
            List<FilePojo> result = tree(indexDir);
            for (FilePojo po : result) {
                String name = po.getName();
                String path = po.getPath();
                try {
					System.out.println("Indexing file: " + path);
					Document doc = new Document();
					f1.setValue(name);
					doc.add(f1);
					f2.setValue(path);
					doc.add(f2);
					indexWriter.addDocument(doc);
				} catch (IOException e) {
					e.printStackTrace();
				}
            }
			
			//查看IndexWriter里面有多少个索引
			System.out.println("numDocs:"+indexWriter.numDocs());
			indexWriter.commit();
			long endTime = new Date().getTime();
			System.out.println("耗时:" + (endTime - startTime));
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (LockObtainFailedException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				indexWriter.close();
			} catch (CorruptIndexException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

 搜索index

 

	/**
	 * V Lucene 3.5
	 * 搜索索引
	 */
	public static void readIndex(){
		IndexSearcher indexSearch = null;
		try {
			//保存索引文件的地方  
			 Directory dir = new SimpleFSDirectory(new File(LUCENEDATA));
			 
			 /**
			  * indexSearch = new IndexSearcher(dir);<被弃用>
			  */
			 indexSearch = new IndexSearcher(IndexReader.open(dir));
			 
			 //创建QueryParser对象,第一个参数表示Lucene的版本,第二个表示搜索Field的字段,第三个表示搜索使用分词器  
			 QueryParser queryParser = new QueryParser(Version.LUCENE_35,  
			         "name", new StandardAnalyzer(Version.LUCENE_35));
			 
			 String key = "tESt.html";
			 //生成Query对象  
			 Query query = queryParser.parse(key);
			 
			 /**
			  * 搜索结果 TopDocs里面有scoreDocs[]数组,里面保存着索引值
			  * API: Finds the top n  hits for query
			  */
			 TopDocs hits = indexSearch.search(query, 10);
			 //hits.totalHits表示一共搜到多少个
			 System.out.println("共搜索到"+hits.totalHits+"个 '"+key+"'");
			 
			 //循环hits.scoreDocs数据,并使用indexSearch.doc方法把Document还原,再拿出对应的字段的值  
			 for (ScoreDoc sdoc : hits.scoreDocs) {  
			     Document doc = indexSearch.doc(sdoc.doc);  
			     System.out.println(doc.get("path"));              
			 }
			 indexSearch.close();
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("There is no index files...");
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}

 

其他示例:

 

http://liuzidong.iteye.com/blog/1316940

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics