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

lucene+paoding实现全文检索

 
阅读更多

Lucene的主要逻辑图

Lucene包括两块:一是文本内容经切词后索入库;二是根据查询条件返回结果。

 

根据这个图来实现非常简单,如下

 

 

 

创建索引:

public String createIndex() throws Exception {
		// 实例化分词器,使用的是中文分词器
		Analyzer analyzer = new PaodingAnalyzer();
		// 指定要保存的文件路径并保存到FSDirectory中
		FSDirectory directory = FSDirectory.getDirectory(URLDecoder.decode(AnalyzerAction.class
				.getResource("/date/index/article/").toString(),"UTF-8").substring(6));
		// true表示覆盖原来已经创建的索引,如果是false表示不覆盖,而是继续添加索引
		IndexWriter writer = new IndexWriter(directory, analyzer, true);

		List list = articleManager.articleList();

		for (Iterator it = list.iterator(); it.hasNext();) {
			Document doc = new Document();
			Article article = (Article) it.next();
			doc.add(new Field("id", String.valueOf(article.getId()), Field.Store.YES,
					Field.Index.UN_TOKENIZED));
			doc.add(new Field("article_title", article.getArticleTitle(), Field.Store.YES,
					Field.Index.TOKENIZED));
			String content = FunctionUtil.Html2Text(article.getArticleContent());
			doc.add(new Field("article_content", content, Field.Store.YES,
					Field.Index.TOKENIZED));
			writer.addDocument(doc);
		}
		writer.optimize();
		writer.close();
}

 

 

搜索结果:

 

/**
	 * 通过关键词 得到结果
	 */

	public void searchIndex(String path, String keywords) throws Exception {
		FSDirectory directory = FSDirectory.getDirectory(path);
		IndexReader reader = IndexReader.open(directory);

		Searcher searcher = new IndexSearcher(directory);

		// MultiFieldQueryParser.parse中的参数分别为:
		// 1.关键词
		// 2.要查询的字段,字符串类型的数组
		String[] field = { "article_title", "article_content" };
		// 3.两个字段的关系(与或非)
		BooleanClause.Occur[] flags = new BooleanClause.Occur[] {
				BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD };
		// 4.指明分词的时候所用的分词器
		Analyzer analyzer = new PaodingAnalyzer();
		Query query = MultiFieldQueryParser.parse(keywords, field, flags,
				analyzer);

		// 由于我们目前使用的查询是多字段查询,需要匹配度的排序
		// QueryScorer内置计分器
		query.rewrite(reader);// 用于重写query对象,目的能够让计分器识别当前的query.

		// 获得结果集
		Hits hits = searcher.search(query);

		

		for (int i = 0; i < hits.length(); i++) {

			Document doc = hits.doc(i);
			Article article = new Article();
			article.setId(Integer.valueOf(doc.get("id")));
			// title
			String title = doc.get("article_title");
			// content
			String content = doc.get("article_content");
			// 以上两项需要加亮

			// Highlighter的构造函数中需要添加两个参数
			// 1.高亮文字的格式(这个格式是基于html)
			SimpleHTMLFormatter simpleHTMLFOrmatter = new SimpleHTMLFormatter(
					"<font color=red>", "</font>");
			// 2.计分器
			Highlighter highlighter = new Highlighter(simpleHTMLFOrmatter,
					new QueryScorer(query));

			// 关键字附近字符串的截取,截取120个字
			Fragmenter fragmenter = new SimpleFragmenter(120);
			highlighter.setTextFragmenter(fragmenter);

			// 针对某个字段的加亮以及截取
			TokenStream tokenStream = analyzer.tokenStream("article_content",
					new StringReader(content));
			//将加亮并截取的字符串取出来
			String highLightText = highlighter.getBestFragment(tokenStream, content);
			
			article.setArticleContent(highLightText);
			
			
			// 针对某个字段的加亮以及截取
			TokenStream title_tokenStream = analyzer.tokenStream("article_title",
					new StringReader(title));
			//将加亮并截取的字符串取出来
			String title_highLightText = highlighter.getBestFragment(title_tokenStream, title);
			article.setArticleTitle(title_highLightText);
			
			searcheResult.add(article);
		}
		reader.close();
	}

  



 



 

  • 大小: 22.2 KB
分享到:
评论

相关推荐

    中文搜索分词lucene包+paoding包

    Lucene是一个强大的全文检索库,由Apache软件基金会开发。它提供了索引和搜索文本的能力,使得开发者能够快速构建自己的搜索应用。在中文处理方面,Lucene虽然内置了一些基本的分词功能,但是对于复杂的中文词汇和...

    paoding+lucene实现全文检索功能简单实例

    本实例将介绍如何结合Paoding和Lucene来实现一个简单的全文检索系统,这在处理中文数据时尤其有效。 首先,让我们了解一下Paoding。Paoding是一款优秀的中文分词库,它针对中文的特点进行了优化,能有效地进行词语...

    lucene Demo(paoding)

    Lucene是开源的全文检索引擎库,它提供了强大的文本搜索功能,而Paoding则是针对中文处理的插件,优化了Lucene对中文的支持。 在【描述】中提到的"lucene demo and paoding good shuang",可以理解为这个项目不仅...

    lucene-4.8.1 + paoding-analysis-master

    Lucene是一个高性能、全文检索库,由Apache软件基金会开发,提供了一个可扩展的搜索和索引框架。在版本4.8.1中,Lucene已经相当成熟,支持多种文本分析器,包括对中文的支持。然而,Lucene本身并不包含专门针对中文...

    Solr3.2 + Paoding中文分词的搜索引擎

    Apache Solr是基于Lucene的开源搜索服务器,提供了更高级别的API和配置选项,而Paoding则是一款专门针对中文的高性能分词工具,能准确地对中文文本进行切词,提升搜索的精确度。 首先,Apache Solr 3.2是Solr的一个...

    lucene3.0学习笔记(三)与paoding整合

    总的来说,通过整合Lucene 3.0与Paoding,我们可以实现更精准、更符合中文习惯的全文搜索功能。这不仅提高了搜索效率,也为用户带来了更好的交互体验。在实际应用中,根据项目需求,还可以进一步定制和优化这两个...

    solr+paoding

    ### Solr + Paoding:构建高效全文检索系统 #### 一、Solr简介与核心功能 **Solr** 是一种开放源代码的企业级搜索平台,它基于 **Lucene Java**,能够提供强大的全文检索功能。Solr 的核心优势在于其灵活易用的...

    Lucene建立索引jar包和Paoding分词jar包

    Lucene,作为一款开源的全文检索库,被广泛应用于各种信息检索系统中,而Paoding分词则是针对中文进行高效精准分词的工具,两者结合能显著提升中文文本检索的效率和准确性。下面将详细介绍Lucene和Paoding分词在构建...

    paoding_analysis.rar_PaodingAnalysis_lucene paoding_paodi

    而针对中文处理,PaodingAnalysis(又称Paoding分词器)则扮演了重要的角色,它为Lucene提供了精准的中文分词能力,使得中文信息检索更加准确和高效。本文将深入探讨PaodingAnalysis与Lucene结合使用的相关知识点。 ...

    lucene实现站内检索

    总之,Lucene作为强大的全文检索库,通过与Paoding Analyzer和JavaCC等工具的结合,能有效处理中文分词和提高索引效率,为站内检索提供坚实的基础。开发者可以根据自身需求,进一步定制和优化,以满足各种复杂的搜索...

    lucene实现站内信息检索

    Lucene是一个强大的全文搜索引擎库,由Apache软件基金会开发并维护,广泛应用于各种信息检索系统中,包括网站的站内搜索功能。本示例将深入探讨如何使用Lucene来实现对HTML文件的站内信息检索。 首先,我们需要了解...

    适合lucene3.0用的paoding-analysis的jar包

    在信息检索领域,Apache Lucene是一款强大的全文搜索引擎库,被广泛应用于各种信息检索系统。Lucene3.0是其历史版本之一,具备高效、灵活的特点。在这个版本中,开发者们引入了各种优化和改进,使得搜索引擎的性能...

    lucene中文分词器(paoding解牛)

    总的来说,Paoding分词器是Lucene进行中文信息处理的一个强大工具,它的出现极大地提升了中文文本在搜索引擎中的检索效率和准确性。通过深入理解和熟练运用Paoding,我们可以构建出更加符合中文特性的搜索引擎系统,...

    lucenedome

    Lucene,作为一个开源的全文检索库,因其强大的功能和简单的API设计,备受开发者青睐。本篇文章将围绕"lucenedome"这一主题,深入解析Lucene的使用以及与Paoding的结合,帮助你更好地理解和应用这两个技术。 首先,...

    paoding-webx3-solr-lucene

    Lucene是Java最著名的全文检索库,而Solr在其基础上增加了集群、分布式搜索、多文档格式支持等功能,使得大规模数据的搜索变得简单。在"paoding-webx3-solr-lucene"项目中,Solr作为后端的核心组件,负责存储和管理...

    paoding 分词

    paoding可方便地与Lucene、Solr等全文检索引擎集成,提供高性能的中文分词服务。 总结来说,paoding分词是一个强大的中文分词工具,其高效、灵活的特性使得它在众多分词库中脱颖而出。通过理解其工作原理和熟练...

    compass jar包

    完整的compass包,里面有SSH+compass实现全文检索需要用到的5个包.compass-2.1.0.jar compass-index-patch.jar lucene-core.jar lucene-highlighter.jar paoding-analysis.jar

    lucene.jar架包

    Lucene.jar 架包是构建全文检索应用的基础,结合其他扩展库(如 Compass 和 Paoding Analysis),开发者可以构建出强大且高效的搜索系统。无论是在小型项目还是大型企业级应用中,Lucene 都是一个不可或缺的工具。...

    lucene简单教程poading中文分词.pdf

    5. 在用户进行搜索时,同样使用 Paoding 分词器处理用户的查询请求,然后在 Lucene 索引中检索匹配的文档。 ### 示例代码解析 文档中提到了一些 Java 代码片段,这些代码展示了如何在 Lucene 索引中操作数据和使用...

    技术团队培训:全文检索.pptx

    - **Apache Lucene**:一个高性能的全文检索库,提供基础的索引和搜索功能。 - **Apache Solr**:基于Lucene的一个高级搜索引擎平台,提供了更多的功能和更好的性能。 - **Apache Nutch**:一个高度可扩展的网络爬虫...

Global site tag (gtag.js) - Google Analytics