`
smallearth
  • 浏览: 37447 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

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();
			}

}
 


分享到:
评论

相关推荐

    Lucene3总体图_建索引_查询_数据库索引

    #### 一、Lucene3概述 Lucene是一款高性能、全功能的文本搜索引擎库,被广泛应用于多种场景下的文本检索。Lucene3相较于之前的版本,主要增加了对国际化的支持,引入了`message`包来处理与语言相关的功能。 #### ...

    java+lucene)1236.rar_Lucene 搜索_Luncene_lucene_lucene web

    【标题】"java+lucene)1236.rar_Lucene 搜索_Luncene_lucene_lucene web" 提供的信息表明这是一个使用Java和Lucene框架实现的搜索系统,特别是针对公交数据的搜索。Lucene是Apache软件基金会的一个开源全文检索库,...

    vb.net2.0_Lucene_test.rar_lucene_lucene vb.n_lucene.net vb

    标题中的“vb.net2.0_Lucene_test.rar_lucene_lucene vb.n_lucene.net vb”表明这是一个关于使用VB.NET 2.0版本实现Lucene搜索引擎的测试项目。Lucene是一个高性能、全文本搜索库,广泛应用于Java开发,而这里则是将...

    ssd.rar_lucene_搜索 lucene_搜索引擎_文本搜索

    在"ssd.rar_lucene_搜索 lucene_搜索引擎_文本搜索"这个项目中,我们看到的是一个利用Lucene实现的桌面搜索引擎实例。 **文本搜索的基本原理** 文本搜索的核心在于将非结构化的文本数据转换成结构化的索引形式,...

    Lucene.Net_2_9_1.zip

    Lucene.Net是一个基于Java Lucene的.NET全功能搜索库,它提供了强大的文本分析、索引和搜索功能。这个版本2.9.1是该库的一个稳定版本,适用于.NET Framework的应用开发。Lucene.Net的核心设计目标是使开发者能够轻松...

    lucenevideao(eddy).rar_Lucene.net a_eddy_lucene_lucene web_luce

    这个名为“lucenevideao(eddy).rar_Lucene.net a_eddy_lucene_lucene web_luce”的资源,包含了一份由Eddy精心制作的Lucene.NET视频教程,以及相关的学习材料,是深入理解和应用Lucene.NET的好帮手。 首先,视频...

    Lucene全文搜索_LuceneJava全文搜索_

    Lucene是Apache软件基金会的一个开源项目,它是一个高性能、可扩展的信息检索库,为Java开发人员提供了全文检索和分析的核心工具。这个库使得开发者能够轻松地在应用程序中集成高级的搜索功能,支持英文和其他语言的...

    Lucene3总体图_建索引_查询_数据库索引[参考].pdf

    **Lucene 3.0 知识点详解** ...通过上述步骤,开发者可以创建一个完整的Lucene索引,从而为应用程序提供快速的全文搜索功能。Lucene的灵活性和强大的搜索能力使其成为许多软件开发项目中不可或缺的一部分。

    chinese_lucene.rar_Lucene C#_Lucene for .net_PanGu4Lucene_lucene

    当与Lucene集成时,Pangu4Lucene能够无缝地将分词结果导入到Lucene索引中,提升搜索体验。开发者可以通过调用Pangu4Lucene的相关API,轻松地在自己的应用程序中实现中文分词和索引创建。 “Lucene for .NET”是...

    Lucene.Net_2_1_0.rar

    在Lucene.Net 2.1.0版本中,有几个关键知识点值得一提: 1. **分词器(Tokenizer)与分析器(Analyzer)**:分词器将原始文本分解为可搜索的词汇单元,而分析器则负责整个过程,包括分词、去除停用词、词形还原等。...

    Lucene资料大全(包括Lucene_in_Action书等)

    标题"Lucene资料大全(包括Lucene_in_Action书等)"表明这是一个包含全面Lucene学习资源的集合,其中最显著的是《Lucene_in_Action》这本书。这是一本广泛认可的关于Apache Lucene的权威指南,通常被简称为LIA,它深入...

    基于lucene技术的增量索引

    - **优化索引**:定期执行索引优化(`IndexWriter.optimize()`)可以合并较小的段,提高搜索效率,但需要注意这是一项耗时操作,应谨慎使用。 - **恢复机制**:应建立备份策略,以防数据丢失或系统故障。Lucene提供...

    Lucene.Net_1_9_RC1_final

    3. 索引(Index):索引是Lucene的核心,它将文档转换为倒排索引结构,以便快速查找匹配查询的文档。索引过程包括分析、创建Term(词项)和Posting(文档位置信息)。 4. 查询(Query):查询对象表示用户要搜索的...

    Lucene.Net_1_4_3_RC3_final

    Lucene.Net是一个基于Apache Lucene的开源全文检索库,专为.NET Framework环境设计。这个库使得.NET开发者能够方便地在他们的应用程序中集成强大的全文搜索功能,从而提升用户体验和数据查找效率。Lucene.Net_1_4_3_...

    Lucene5学习之增量索引(Zoie)

    总结起来,Lucene5学习之增量索引(Zoie)涉及到的关键技术点包括: 1. 基于Lucene的增量索引解决方案:Zoie系统。 2. 主从复制架构:Index Provider和Index User的角色。 3. 数据变更追踪:通过变更日志实现增量索引...

    Lucene.Net_2_9_1.rar

    作为一个高度可扩展和高性能的搜索库,Lucene.Net为开发者提供了强大的文本分析和索引功能,使得在.NET应用中构建全文搜索引擎变得相对简单。这个2.9.1版本的发布,为开发者提供了稳定且经过广泛测试的搜索解决方案...

    Lucene.Net_2_4_0.rar

    1. **创建索引**:首先需要创建一个索引writer,将要搜索的文档内容转化为 Lucene 可理解的格式,然后添加到索引中。 2. **索引优化**:定期进行索引优化,合并多个段以提高查询效率。 3. **查询执行**:通过 ...

    Lucene3.0_使__用_教_程.doc

    Lucene是全文检索领域的代表框架之一,它提供了构建、管理和搜索索引的能力。在使用Lucene前,理解其工作流程至关重要。首先,需要将待检索的资源集合构建为本地索引库,这个索引库采用优化的结构以实现快速查询。当...

    Lucene.Net_2_9_2.rar

    Lucene.Net是一个开源、高性能的全文检索库,它是Apache Lucene项目在.NET平台上的实现。这个库为开发者提供了一种简单、高效的方式,用于在应用程序中实现强大的搜索功能。在本文中,我们将深入探讨Lucene.Net ...

    Lucene.Net_2_3_2.rar

    Lucene.Net是一个基于Apache Lucene项目,专为.NET Framework设计的全文检索库。它提供了强大的搜索功能,允许开发者在应用程序中轻松构建自己的搜索引擎。这个版本,即Lucene.Net 2.3.2,虽然相对陈旧,但仍然是...

Global site tag (gtag.js) - Google Analytics