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是一个强大的全文检索库,由Apache软件基金会开发。它提供了索引和搜索文本的能力,使得开发者能够快速构建自己的搜索应用。在中文处理方面,Lucene虽然内置了一些基本的分词功能,但是对于复杂的中文词汇和...
本实例将介绍如何结合Paoding和Lucene来实现一个简单的全文检索系统,这在处理中文数据时尤其有效。 首先,让我们了解一下Paoding。Paoding是一款优秀的中文分词库,它针对中文的特点进行了优化,能有效地进行词语...
Lucene是开源的全文检索引擎库,它提供了强大的文本搜索功能,而Paoding则是针对中文处理的插件,优化了Lucene对中文的支持。 在【描述】中提到的"lucene demo and paoding good shuang",可以理解为这个项目不仅...
Lucene是一个高性能、全文检索库,由Apache软件基金会开发,提供了一个可扩展的搜索和索引框架。在版本4.8.1中,Lucene已经相当成熟,支持多种文本分析器,包括对中文的支持。然而,Lucene本身并不包含专门针对中文...
Apache Solr是基于Lucene的开源搜索服务器,提供了更高级别的API和配置选项,而Paoding则是一款专门针对中文的高性能分词工具,能准确地对中文文本进行切词,提升搜索的精确度。 首先,Apache Solr 3.2是Solr的一个...
总的来说,通过整合Lucene 3.0与Paoding,我们可以实现更精准、更符合中文习惯的全文搜索功能。这不仅提高了搜索效率,也为用户带来了更好的交互体验。在实际应用中,根据项目需求,还可以进一步定制和优化这两个...
### Solr + Paoding:构建高效全文检索系统 #### 一、Solr简介与核心功能 **Solr** 是一种开放源代码的企业级搜索平台,它基于 **Lucene Java**,能够提供强大的全文检索功能。Solr 的核心优势在于其灵活易用的...
Lucene,作为一款开源的全文检索库,被广泛应用于各种信息检索系统中,而Paoding分词则是针对中文进行高效精准分词的工具,两者结合能显著提升中文文本检索的效率和准确性。下面将详细介绍Lucene和Paoding分词在构建...
而针对中文处理,PaodingAnalysis(又称Paoding分词器)则扮演了重要的角色,它为Lucene提供了精准的中文分词能力,使得中文信息检索更加准确和高效。本文将深入探讨PaodingAnalysis与Lucene结合使用的相关知识点。 ...
总之,Lucene作为强大的全文检索库,通过与Paoding Analyzer和JavaCC等工具的结合,能有效处理中文分词和提高索引效率,为站内检索提供坚实的基础。开发者可以根据自身需求,进一步定制和优化,以满足各种复杂的搜索...
Lucene是一个强大的全文搜索引擎库,由Apache软件基金会开发并维护,广泛应用于各种信息检索系统中,包括网站的站内搜索功能。本示例将深入探讨如何使用Lucene来实现对HTML文件的站内信息检索。 首先,我们需要了解...
在信息检索领域,Apache Lucene是一款强大的全文搜索引擎库,被广泛应用于各种信息检索系统。Lucene3.0是其历史版本之一,具备高效、灵活的特点。在这个版本中,开发者们引入了各种优化和改进,使得搜索引擎的性能...
总的来说,Paoding分词器是Lucene进行中文信息处理的一个强大工具,它的出现极大地提升了中文文本在搜索引擎中的检索效率和准确性。通过深入理解和熟练运用Paoding,我们可以构建出更加符合中文特性的搜索引擎系统,...
Lucene,作为一个开源的全文检索库,因其强大的功能和简单的API设计,备受开发者青睐。本篇文章将围绕"lucenedome"这一主题,深入解析Lucene的使用以及与Paoding的结合,帮助你更好地理解和应用这两个技术。 首先,...
Lucene是Java最著名的全文检索库,而Solr在其基础上增加了集群、分布式搜索、多文档格式支持等功能,使得大规模数据的搜索变得简单。在"paoding-webx3-solr-lucene"项目中,Solr作为后端的核心组件,负责存储和管理...
paoding可方便地与Lucene、Solr等全文检索引擎集成,提供高性能的中文分词服务。 总结来说,paoding分词是一个强大的中文分词工具,其高效、灵活的特性使得它在众多分词库中脱颖而出。通过理解其工作原理和熟练...
完整的compass包,里面有SSH+compass实现全文检索需要用到的5个包.compass-2.1.0.jar compass-index-patch.jar lucene-core.jar lucene-highlighter.jar paoding-analysis.jar
Lucene.jar 架包是构建全文检索应用的基础,结合其他扩展库(如 Compass 和 Paoding Analysis),开发者可以构建出强大且高效的搜索系统。无论是在小型项目还是大型企业级应用中,Lucene 都是一个不可或缺的工具。...
5. 在用户进行搜索时,同样使用 Paoding 分词器处理用户的查询请求,然后在 Lucene 索引中检索匹配的文档。 ### 示例代码解析 文档中提到了一些 Java 代码片段,这些代码展示了如何在 Lucene 索引中操作数据和使用...
- **Apache Lucene**:一个高性能的全文检索库,提供基础的索引和搜索功能。 - **Apache Solr**:基于Lucene的一个高级搜索引擎平台,提供了更多的功能和更好的性能。 - **Apache Nutch**:一个高度可扩展的网络爬虫...