`
yu120
  • 浏览: 81841 次
社区版块
存档分类
最新评论

Lucene处理关键字高亮显示的效果

阅读更多
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.highlight.*;
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;
import org.wltea.analyzer.lucene.IKAnalyzer;
 
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
 
/**
 * 搜索工具类
 */
public class SearchHelper {
 
    private final static Log log = LogFactory.getLog(SearchHelper.class);
    private final static IKAnalyzer analyzer = new IKAnalyzer();
    private final static Formatter highlighter_formatter = new SimpleHTMLFormatter("<span class=\"highlight\">","</span>");
    /**
     * 对一段文本执行语法高亮处理
     * @param text 要处理高亮的文本
     * @param key 高亮的关键字
     * @return 返回格式化后的HTML文本
     */
    public static String highlight(String text, String key) {
        if(StringUtils.isBlank(key) || StringUtils.isBlank(text))
            return text;
        String result = null;
        try {
            key = QueryParser.escape(key.trim().toLowerCase());
            QueryScorer scorer = new QueryScorer(new TermQuery(new Term(null,QueryParser.escape(key))));
            Highlighter hig = new Highlighter(highlighter_formatter, scorer);
            TokenStream tokens = analyzer.tokenStream(null, new StringReader(text));
            result = hig.getBestFragment(tokens, text);
        } catch (Exception e) {
            log.error("Unabled to hightlight text", e);
        }
        return (result != null)?result:text;
    }
 
}

 

protected static void test_highlight() {
    String text = "Tomcat 是最好的 Java 应用服务器";
    System.out.println("RESULT:" + SearchHelper.highlight(text, "Tomcat"));
}

 

分享到:
评论

相关推荐

    Lunene分页关键字高亮显示

    标题 "Lunene分页关键字高亮显示" 暗示了我们正在讨论一个与搜索引擎或数据检索相关的项目,其中涉及到了Lunene(可能是Lucene的误拼),一种广泛使用的全文搜索引擎库,以及如何在搜索结果中实现分页和关键字高亮。...

    Lucene5学习之Highlighte关键字高亮

    《Lucene5学习之Highlighter关键字高亮》 在信息技术领域,搜索引擎的使用已经变得无处不在,而其中的关键技术之一就是如何有效地突出显示搜索结果中的关键字,这就是我们今天要探讨的主题——Lucene5中的...

    Lucene3.0增删改查和关键字高亮实例

    在这个“Lucene3.0增删改查和关键字高亮实例”项目中,我们将深入理解如何利用Lucene 3.0版本进行索引构建、文档的增删改查操作,并学习关键字高亮显示的实现方法。 首先,我们要了解**创建索引**的基本流程。在...

    Lucene与数据库结合示例(加双关键字高亮)

    “Lucene与数据库结合示例(加双关键字高亮)”这个标题表明,我们将讨论如何将开源全文搜索引擎Lucene与关系型数据库MySQL整合在一起,并且在搜索结果中实现关键词高亮显示,以提升用户体验。这通常涉及到数据的...

    android+lucene实现全文检索并高亮关键字索引库

    下面我们将深入探讨如何在Android环境中利用Lucene来创建一个高效、功能丰富的全文检索系统,并了解如何高亮显示搜索结果中的关键字。 首先,我们要理解全文检索的基本原理。全文检索是指通过建立倒排索引来快速...

    一步一步跟我学习lucene(11)---lucene搜索之高亮显示highlighter

    在本教程中,我们将深入探讨Lucene中的高亮显示机制,这是搜索引擎返回结果时非常有用的一项功能,可以突出显示与查询匹配的关键字。在实际应用中,用户通常希望看到搜索词在文档中的确切位置,高亮显示使得这些匹配...

    android+lucene实现全文检索并高亮关键字

    总之,通过使用Apache Lucene,Android应用可以提供强大的全文检索功能,同时高亮显示关键字,提升用户在查找本地文档时的体验。在实现过程中,需要注意资源管理、性能优化以及错误处理,确保在有限的Android环境中...

    利用lucene实现文档关键字检索

    在这个使用案例中,我们将深入探讨如何利用Lucene实现对Word文档中的关键字检索并高亮显示结果。 首先,我们需要理解Lucene的基本工作原理。Lucene通过建立倒排索引(Inverted Index)来加速查询。倒排索引是一种...

    整合Lucene搜索用户新闻项目实例,支持搜索关键词高亮

    在实际应用中,我们通常会对搜索结果的摘要或全文进行高亮处理,使用户能一眼看到搜索关键词。 在Java项目中整合Lucene,还需要考虑与数据库的交互,例如,这里的SQL文件"lucenedemo.sql"可能用于初始化数据库,...

    安卓搜索相关相关-androidlucene实现全文检索并高亮关键字.rar

    总结来说,这个压缩包提供了在Android环境下利用Apache Lucene实现全文检索和关键字高亮的示例代码,对于想学习这一技术的开发者来说是一个宝贵的资源。尽管可能需要一定的调整和优化才能在实际项目中应用,但通过...

    对设置 的关键字的全文检索,并且高亮显示

    这些库提供了完整的解决方案,包括索引构建、查询处理和高亮显示等功能。 在实际应用中,全文检索和高亮显示还可以结合其他高级特性,如拼写纠错、相关性反馈、同义词扩展等,进一步提升搜索体验。同时,为了满足大...

    详解SpringBoot+Lucene案例介绍

    * lucene-highlighter:提供了关键字高亮显示的功能,用于高亮显示搜索结果中的关键字。 * lucene-analyzers-smartcn:提供了中文分词器,用于将中文文本拆分为单词。 三、配置初始化 在SpringBoot中,我们需要...

    java(结合lucene)版的公交搜索系统

    搜索的时候,不限制站点个数和顺序,支持关键字高亮显示。 管理后台:/admin/adminLogin.jsp username: jobcnn password: 123456 管理用户名和密码的更改在:\WEB-INF\classes\sys_setting.properties 文件里面配置...

    Lucene.Net_2_9_1 含高亮等包完整版

    使用高亮器,我们可以突出显示搜索查询中的关键字,使其在文档内容中更加醒目。通常,这涉及到将原始文本分词,找到匹配的搜索词,然后用特定的格式(如不同的颜色或样式)替换这些关键词。在Lucene.Net 2.9.1中,这...

    lucene全文搜索ajax例子

    总的来说,这个例子是一个综合性的Web应用,它展示了如何利用Lucene进行全文搜索,结合Ajax技术实现动态更新的搜索结果展示,同时还包括了高亮显示和多次搜索的功能。这对于学习和理解Lucene在实际应用中的工作原理...

    Lucene基于java的全文检索案例

    5. **高亮显示(Highlighting)**: Lucene 提供了高亮查询结果的功能,可以在显示搜索结果时突出显示匹配的关键词,提升用户体验。 **实现案例** 在 "luceneDemo" 压缩包中,你可能会找到以下部分示例代码和配置,...

    lucene.net+盘古分词多条件全文检索并匹配度排序

    使用visual studio 开发的lucene.net和盘古分词实现全文检索。并按照lucene的得分算法进行多...有点小bug,在这个字段没有关键字的时候可能会不显示数据, 如果要是只看全文检索,可以自己去掉高亮,看一下检索结果。

    lucene实现全文搜索

    此外,Lucene还支持高亮显示搜索结果中的关键词,使用户更容易识别相关性高的部分。 【总结】 Lucene是一个强大的全文搜索引擎库,它简化了从数据提取、索引创建到查询执行的整个过程。通过理解并熟练运用Document...

    Lucene搜索引擎

    同时,系统会在显示的结果中将搜索的关键字进行高亮,通常是通过添加HTML标签(如`&lt;mark&gt;`)来实现描红效果,使得用户一眼就能看出搜索词在文本中的位置。 6. **Database和03**:这两个文件名可能分别代表了数据库...

    DotLucene演示源码

    4. **结果处理**:对搜索结果进行排序(基于相关性或其他自定义标准),并进行关键字高亮处理。这一步可能需要用到Highlighter类,它可以根据查询词在原始文档中找出匹配的部分并进行高亮。 5. **结果展示**:最后...

Global site tag (gtag.js) - Google Analytics