`
SteveLee
  • 浏览: 25265 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Lucene3.5 实现创建索引和搜索实例

 
阅读更多

                

       最近在做关于大数据量查询,发现Lucene是个不错的选择。关于Luncene3.5的代码在网上不是很多,参考网上一些代码并看API,做出如下代码,有什么问题,给留言。

 

  

       1.数据库作为数据源,创建索引:

  

           

 //创建索引
public void createIndex(OpenMode  openMode,List<Authors> list){
             try {
		IndexWriter indexWriter=null;
		try {
			indexWriter=new LTes ().createIndexWriter(openMode);
		} catch (Exception e) {
			e.printStackTrace();
		}
		//List<Authors> list=new  PersistenceFacade().query("from Authors where id=300");
		for(Authors au:list){
			  Document doc=new Document();
	          doc.add(new Field("id",au.getId()+"",Field.Store.YES,Field.Index.ANALYZED));
	          doc.add(new Field("authorName",au.getAuthorName(),Field.Store.YES,Field.Index.ANALYZED));
	          doc.add(new Field("authorID",au.getAuthorID(),Field.Store.YES,Field.Index.NO));
	          doc.add(new Field("phone",au.getPhone(),Field.Store.YES,Field.Index.NO));
	          doc.add(new Field("Address",au.getAddress() ,Field.Store.YES,Field.Index.NO));
	          doc.add(new Field("City",au.getAuthorID(),Field.Store.YES,Field.Index.NO));
	          doc.add(new Field("status",au.getPhone(),Field.Store.YES,Field.Index.NO));
	          doc.add(new Field("zip",au.getPhone(),Field.Store.YES,Field.Index.NO));
	          //indexWriter.addDocument(doc);
			  if (indexWriter.getConfig().getOpenMode() == IndexWriterConfig.OpenMode.CREATE)
		      {
				  logger.info("OpenModel:CREATE");
				  indexWriter.addDocument(doc);
		      }
		      else
		      {
		    	  logger.info("OpenModel:APPEND");
		          indexWriter.updateDocument(new Term("id",String.valueOf(au.getId())), doc);
		      }		
		}
			indexWriter.close();
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
   }
   

 

 

         提示:  indexWriter.updateDocument(new Term("id","123"), doc);

   表示更新ID为123的索引,如果没有则新增。

  

/**
	 * 创建索引
	 * @return
	 */
	public IndexWriter createIndexWriter(OpenMode openMode)throws Exception{
		
		//索引存放位置设置
		Directory dir = FSDirectory.open(new File("E:\\index"));		
		// 索引配置类设置
		IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35,
				new StandardAnalyzer(Version.LUCENE_35));
		iwc.setOpenMode(openMode);
		IndexWriter writer = new IndexWriter(dir, iwc);
		return writer;
	}

 

 

 

     

   2.检索数据:

 

    

public  List<Authors> search(String queryString) throws Exception{
		String[] queryFields={"authorName"};
		List<Authors> list=new ArrayList<Authors>();
		IndexReader reader=IndexReader.open(FSDirectory.open(new File("E:\\index")));
		IndexSearcher searcher=new IndexSearcher(reader);
		QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_35, queryFields,new StandardAnalyzer(Version.LUCENE_35));
		Query query = parser.parse(queryString);
		TopDocs results = searcher.search(query,null,1000);
		ScoreDoc[] hits=results.scoreDocs;
		for(ScoreDoc sd:hits){
	       int docID=sd.doc;
	       Document doc=searcher.doc(docID);
	       Authors authors=new Authors();
	       authors.setId(Integer.valueOf(doc.get("id")));
	       authors.setAddress(doc.get("Address"));	       
	       authors.setAuthorID(doc.get("authorID"));
	       authors.setAuthorName(doc.get("authorName"));
	       authors.setCity(doc.get("city"));
	       authors.setPhone(doc.get("phone"));
	       authors.setStatus(doc.get("status"));
	       authors.setZip(doc.get("zip"));
	       list.add(authors);
		}
		return list;
		//System.out.println("总符合: " + results.totalHits + "条数!");
	}

 

 

 

         以上是Lucene3.5创建索引和检索索引的方法。


                         

  

 

分享到:
评论
3 楼 walong2012 2012-06-18  
请问可以给完整的实例吗可以部署的,我是刚刚学lucene,想通过成功运行后读源码
2 楼 SteveLee 2012-02-10  
创建索引调用createIndex(OpenMode.APPEND);OpenMode 有两个属性APPEND和CREATE。APPEND表示在原来的基础上增加索引,CREATE表示重新创建索引 。
1 楼 649199285 2012-02-03  
我想问一下 你这个OpenMode是怎么个用法。

相关推荐

    Lucene3.5实例

    《Lucene3.5实例详解:构建全文搜索引擎》 Apache Lucene是一个开源的全文检索库,为Java开发者提供了强大的文本搜索功能。在本实例中,我们将深入探讨如何使用Lucene 3.5版本来构建一个基本的全文搜索引擎,主要...

    lucene3.5全文检索案例lucene+demo

    在3.5版本中,Lucene提供了强大的文本处理、索引构建和搜索功能,使得开发者可以轻松地在自己的应用中实现高效的全文检索。本篇文章将围绕“lucene3.5全文检索案例lucene+demo”,详细讲解Lucene 3.5的核心概念、...

    lucene3.5中文分词案例

    在3.5版本中,Lucene已经支持了中文分词,这对于处理中文文档和搜索需求显得尤为重要。本文将深入探讨Lucene 3.5在中文分词方面的实现,以及如何利用其进行有效的中文信息检索。 一、Lucene 3.5中文分词基础 1. ...

    关于lucene3.5的使用

    在“关于lucene3.5的使用”这个主题中,我们将深入探讨Lucene 3.5的关键特性、核心组件以及如何通过实例进行应用。首先,我们需要了解以下几个核心概念: 1. **索引(Index)**:Lucene 的工作基于索引,就像书籍的...

    Lucene测试程序3.5

    通过创建索引、使用标准分词器进行文本分析以及执行检索操作,我们可以看到Lucene如何在幕后高效地工作,使应用程序具备强大的搜索功能。对于学习和掌握Lucene的开发者而言,这是一个非常有价值的实践资源。

    全文检索lucence3.5+IKAnalzers3.5示例

    2. **创建索引**:使用`Directory`类(如`FSDirectory`)打开存储索引的目录,然后创建`IndexWriter`实例。在`IndexWriter`中设置IKAnalyzer作为默认的Analyzer,接着逐个读取要索引的文档,通过`Document`对象存储...

    lucene+中文IK分词器 例子

    总结来说,"lucene3.5 + ik中文分词器例子"是一个展示如何使用Lucene进行中文全文检索的示例,它涵盖了从数据抓取、分词处理、索引建立到查询执行的全过程。通过这个实例,开发者可以更好地理解和掌握Lucene与IK分词...

    lucene的封装和性能优化

    Lucene的核心功能包括索引和搜索。索引是将文档内容转化为便于搜索的结构,而搜索则是基于索引快速找到匹配查询条件的文档。Lucene支持多种搜索类型,如布尔搜索、短语搜索、近似搜索等。 ### 2. Lucene的封装 ###...

    lucene基础总结

    这是因为每次创建索引时都会保留之前的数据,导致重复的文档记录出现。 - 这种情况下,可以通过清理索引目录来避免重复的文档记录。 #### 三、IndexReader的使用 2. **IndexReader的默认属性**: - 使用`...

    Lucene初级教程

    - 下面是一个简单的Java代码片段,展示了如何使用Lucene创建索引: ```java IndexWriter writer = new IndexWriter("/data/index/", new StandardAnalyzer(), true); Document doc = new Document(); doc.add...

    Solr3.5整合Tomcat

    Solr 是一个基于 Lucene 的全文搜索引擎服务器,它提供了高级的搜索功能,广泛应用于网站的全文检索、数据索引和搜索。在企业级应用中,Solr 往往需要与 Web 服务器集成,以实现更高效的服务。在这个场景下,Tomcat ...

    Lucene.Net_2_9_1 含高亮等包完整版

    要使用高亮功能,开发者需要创建一个`Highlighter`对象,并提供一个`Query`、`IndexReader`和`TokenStream`实例。`Query`是用户的搜索请求,`IndexReader`用于访问索引,而`TokenStream`处理索引中的文本。高亮器会...

    JAVA lucene全文检索工具包的理解与使用.doc

    简单来说,Lucene提供了必要的功能和API来实现全文搜索能力,开发者可以根据需求定制开发自己的搜索应用。 - **1.2 Lucene能做什么** Lucene的核心功能非常单一,即提供基于关键字的全文搜索服务。这意味着它可以...

    lucene 初级教程

    与成品搜索引擎(如Google或Baidu)不同,Lucene提供了一个开发平台,使开发者能够根据自己的需求定制和实现搜索功能。 #### 2. Lucene的工作方式 - **2.1 写入流程** - 源字符串经过`Analyzer`进行预处理,其中...

    介绍Lucene.Net

    总结来说,Lucene.Net 是 .NET 开发者实现全文搜索功能的强大工具,通过熟练掌握其 API 和原理,可以创建出高性能、易维护的搜索系统。通过阅读《Introducing-Lucene-Net.pdf》这样的资料,开发者可以深入了解其用法...

    apache-solr-3.5.0.zip

    Solr基于Java,是Apache Lucene项目的一部分,提供了高级的索引和查询功能,支持多种数据源,包括XML、JSON、CSV等。在企业环境中,Solr常常与Web服务器如Tomcat集成,以提供更灵活和方便的部署选项。 标题"apache-...

    开源企业搜索引擎SOLR的应用教程

    **4.4 使用SolrJ创建索引** - 使用SolrJ提供的API将数据添加到索引中。 **4.5 Solrj包的结构说明** - **4.5.1 CommonsHttpSolrServer**:通过HTTP协议与Solr服务器通信的客户端类。 - **4.5.2 Setting XML ...

Global site tag (gtag.js) - Google Analytics