`
edwin492
  • 浏览: 115475 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

lucene实例

阅读更多

基础应用,在保存信息时调用luceneDao中的save方法产生索引,搜索时调用search依据进行查询。

 

@Repository("luceneDao")
public class LuceneDao {
	/**
	 * 
	 * save: 产生索引
	 * 由于在通过IndexWriter对象操作索引库的时候,忘记关闭该对象流了。
	 * 当关闭时,程序退出自会上索引锁,所以在用IndexWriter进行
	 * 索引库操作的时候一定要记得关闭该对象流!  
	 * @param  @param message    设定文件   
	 * @return void    DOM对象   
	 * @throws    
	 * @since  search1.0
	 */
	public void save(Message message) {
		IndexWriter indexWriter = null;
		try {
			indexWriter = SearchUtils.getIndexWriter();
			indexWriter.addDocument(SearchUtils.parseMessageToDocument(message));
			indexWriter.setMergeFactor(4);
			indexWriter.optimize();
			indexWriter.commit();
		} catch (Exception e) {
			e.printStackTrace();   
		}finally{
			if(null != indexWriter){
				try {
					indexWriter.close();
				} catch (Exception e) {
					e.printStackTrace();   
				}
			}
		}
	}
	/**
	 * 
	 * search:查询   
	 *   
	 * @param  @param query
	 * @param  @return    设定文件   
	 * @return List<MessageBean>    DOM对象   
	 * @throws    
	 * @since  search1.0
	 */
	public List<MessageBean> search(String query) {
		List<MessageBean> messageBeans = new ArrayList<MessageBean>();
		IndexSearcher indexSearcher = SearchUtils.getIndexSearch();
		String[] fields = {"title", "content"};
		MultiFieldQueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_30, fields, SearchUtils.analyzer);
		try {
			Query luceneQuery = queryParser.parse(query);
			TopDocs topDocs = indexSearcher.search(luceneQuery, 100);
			ScoreDoc[] scoreDocs = topDocs.scoreDocs;
			
			Formatter formatter = new SimpleHTMLFormatter("<font color='red'>", "</font>");
			QueryScorer scorer = new QueryScorer(luceneQuery);
			Highlighter highlighter = new Highlighter(formatter, scorer);
			
			Fragmenter fragmenter = new SimpleFragmenter(20);
			highlighter.setTextFragmenter(fragmenter);
			
			for(ScoreDoc scoreDoc : scoreDocs){
				Document doc = indexSearcher.doc(scoreDoc.doc);
				String title = highlighter.getBestFragment(SearchUtils.analyzer, "title", doc.get("title"));
				String content = highlighter.getBestFragment(SearchUtils.analyzer, "content", doc.get("content"));
				if( null != title){
					doc.getField("title").setValue(title);
				}
				if( null != content){
					doc.getField("content").setValue(content);
				}
				messageBeans.add(SearchUtils.parseDocumentToMessageBean(doc));
			}
		} catch (Exception e) {
			e.printStackTrace();   
		}finally{
			if(null != indexSearcher){
				try {
					indexSearcher.close();
				} catch (IOException e) {
					e.printStackTrace();   
				}
			}
		}
		return messageBeans;   
	}
}

 

 

 public class SearchUtils {
	public static IKAnalyzer analyzer;
	public static Directory directory;
	
	static {
		File file = new File("./indexs/");
		try {
			directory = FSDirectory.open(file);
			analyzer = new IKAnalyzer();
		} catch (IOException e) {
			e.printStackTrace();   
		}
	}
	/**
	 * 
	 * getIndexWriter:return indexwriter
	 *   
	 * @param  @return    设定文件   
	 * @return IndexWriter    DOM对象   
	 * @throws    
	 * @since  search1.0
	 */
	public static IndexWriter getIndexWriter(){
		IndexWriter indexWriter = null;
		try {
			//字段设置为有限长度
			indexWriter = new IndexWriter(directory, analyzer, 

MaxFieldLength.LIMITED);
			//indexWriter.setMaxFieldLength(100);设置最大长度
		} catch (Exception e) {
			e.printStackTrace();   
		}
		return indexWriter;
	}
	
	/**
	 * 
	 * getIndexSearch:return indexsearcher
	 *   
	 * @param  @return    设定文件   
	 * @return IndexSearcher    DOM对象   
	 * @throws    
	 * @since  search1.0
	 */
	public static IndexSearcher getIndexSearch(){
		IndexSearcher indexSearcher = null;
		try {
			indexSearcher = new IndexSearcher(directory);
		} catch (Exception e) {
			e.printStackTrace();   
		}
		return indexSearcher;
	}
	
	public static IndexReader getIndexReader(){
		IndexReader reader = null;
		try {
			reader = IndexReader.open(directory);
		} catch (Exception e) {
			e.printStackTrace();   
		}
		return reader;
	}
	
	/**
	 * 
	 * parseToObject:from document to Object
	 *   
	 * @param  @param document
	 * @param  @return    设定文件   
	 * @return Lucene    DOM对象   
	 * @throws    
	 * @since  search1.0
	 */
	public static Lucene parseToObject(Document document) {
		Lucene lucene = new Lucene();
		lucene.setTitle(document.get("title"));
		lucene.setUrl(document.get("url"));
		lucene.setDigest(document.get("digest"));
		return lucene;   
		
	}
	
	/**
	 * 
	 * parseMessageToDocument:parse message to document
	 *   
	 * @param  @param message
	 * @param  @return    设定文件   
	 * @return Document    DOM对象   
	 * @throws    
	 * @since  search1.0
	 */
	public static Document parseMessageToDocument(Message message){
		Document doc = new Document();
		doc.add(new Field("id", message.getId(), Store.YES, Index.NOT_ANALYZED));
		doc.add(new Field("title", message.getTitle(), Store.YES, Index.ANALYZED));
		doc.add(new Field("author", message.getAuthor(), Store.YES, Index.ANALYZED));
		doc.add(new Field("keywords", message.getKeywords(), Store.YES, 

Index.ANALYZED));
		doc.add(new Field("content", message.getContent(), Store.YES, 

Index.ANALYZED));
		return doc;
	}
	
	/**
	 * 
	 * parseDocumentToMessageBean:parse document to message
	 *   
	 * @param  @param doc
	 * @param  @return    设定文件   
	 * @return MessageBean    DOM对象   
	 * @throws    
	 * @since  search1.0
	 */
	public static MessageBean parseDocumentToMessageBean(Document doc){
		MessageBean messageBean = new MessageBean();
		messageBean.setId(doc.get("id"));
		messageBean.setTitle(doc.get("title"));
		messageBean.setAuthor(doc.get("author"));
		messageBean.setKeywords(doc.get("keywords"));
		messageBean.setContent(doc.get("content"));
		return messageBean;
	}
	
	/**
	 * 
	 * unLock:unlock   
	 *   
	 * @param      设定文件   
	 * @return void    DOM对象   
	 * @throws    
	 * @since  search1.0
	 */
	public static void unLock(){
		try {
			if (IndexWriter.isLocked(directory)) {
				IndexWriter.unlock(directory);
			}
		} catch (IOException e) {
			e.printStackTrace();   
		}
	}
}
分享到:
评论

相关推荐

    lucene全文搜素实例 java lucene 实例

    **Lucene 全文搜索引擎实例:Java Lucene 实例** Lucene 是 Apache 软件基金会的一个开源项目,它提供了一个高性能、可扩展的信息检索库。这个实例将深入讲解如何在 Java 中使用 Lucene 来创建索引并执行各种搜索...

    Java搜索工具——Lucene实例总结(一)

    Java搜索工具——Lucene实例总结(一) 在Java开发中,搜索引擎已经成为不可或缺的一部分,而Apache Lucene正是一个强大的全文搜索引擎库。这篇博文将带你深入理解Lucene的基本概念和使用方式,帮助你快速入门并掌握...

    lucene实例(包括分页、中文检索等)

    lucene实例是一个比较详细的例子,包括lucene的入门到高级实例,代码里有比较详细的实例,所有的实例都是通过junit来测试的。实例包括各种搜索:如通配符查询、模糊查询、查询结果的分页、中文分词器、自定义分词器...

    经典的lucene实例代码及详细解析以及lucene结构流程介绍

    经典的Lucene实例代码及详细解析以及Lucene结构流程介绍 Lucene是一个功能强大且灵活的开源搜索引擎库,它提供了一个简单易用的API,允许开发者快速构建搜索应用程序。下面将对Lucene的实例代码和结构流程进行详细...

    lucene实例项目及其打包文件

    **Lucene实例项目及其打包文件详解** Lucene是一款强大的全文搜索引擎库,由Apache软件基金会开发,广泛应用于各种信息检索系统。这个实例项目是基于Lucene官网提供的,旨在帮助开发者更好地理解和使用Lucene进行...

    一个关于lucene实例

    在这个"一个关于lucene实例"的压缩包中,很可能是为了帮助初学者理解并掌握Lucene的基本用法和核心概念。 Lucene的主要功能包括文档的索引和搜索。在索引过程中,它能够分析文本,将文本分词,然后将这些词语转换为...

    LUCENE实例

    CreateLucene.java 增量生成索引 CreateLuceneAll.java 全量生成索引 CreateLuceneInter.java 按照时间区间生成索引 里面为参考代码,使用lucene-core-2.9.0.jar

    Lucene实例

    **Lucene实例详解** Lucene,作为Apache软件基金会的一个开源项目,是一款强大的全文搜索引擎库,广泛应用于各种信息检索系统。最新版的Lucene提供了一系列优化和改进,使其在处理大量数据和提高搜索效率方面表现...

    Lucene 实例

    **Lucene 实例使用步骤** 1. **创建索引**:首先,你需要创建一个索引 writer,指定索引目录,然后遍历要索引的文件或数据,使用 Document 对象添加字段,并通过 writer 将其写入索引。 2. **配置分析器**:根据...

    自己写的lucene实例 java搜索引擎

    在这个"自己写的lucene实例 java搜索引擎"中,我们将会探讨Lucene如何与Java结合,以实现在文件内容中的高效搜索。 首先,我们需要理解Lucene的基本工作流程。这个过程主要包括以下几个步骤: 1. **创建索引**:这...

    Lucene搜索实例

    **Lucene 搜索实例** Apache Lucene 是一个高性能、全文本搜索引擎库,它为开发者提供了在各种应用程序中实现全文检索的工具集。Lucene 并不是一个完整的应用,而是一个 Java 类库,可以被其他 Java 应用程序所使用...

    lucene的小案例

    在搜索应用中,Spring可以帮助管理Lucene实例,以及与数据库交互的iBatis配置。 7. **Struts2**:作为MVC框架,Struts2处理HTTP请求,并与后端服务(如Spring和Lucene)交互。用户在前端输入查询后,Struts2会接收...

    Lucene索引器实例

    **Lucene索引器实例详解** Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,被广泛应用于各种搜索引擎的构建。它提供了一个高级的、灵活的、可扩展的接口,使得开发者能够轻松地在应用程序中实现全文...

Global site tag (gtag.js) - Google Analytics