`
liuzm
  • 浏览: 100987 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

lucene2.9 Highlighter中文分词的关键字变红显示用法

阅读更多
想实现Google搜索关键字变红吗?使用Lucene自带的Highlighter就可以实现对原始文件摘要的提取工作。

Highlighter类有一个getBestFragment方法,这个方法有多个重载的方法,其中,使用:

public final String getBestFragment(Analyzer analyzer, String fieldName,String text)

就可以提取摘要,它实现了从指定的原始文件中,提取检索关键字出现频率最高的一段文字作为摘要,默认情况下

提取100个字符,同时加上自定义的高亮显示代码,又可实现关键字高亮显示。


代码 好下:

提醒下:要用Highlighter这个包 ,但是lucene-core-2.9.1.jar 这个包是不包Highlighter这个包的
在你下载的官方安装包 contrib\highlighter\lucene-highlighter-2.9.1.jar
唉,就因来这个包,又花了我不少时间找.已经遇到几次这种情况了
public static void main(String[] args)  {

         String prefixHTML = "<font color='red'>";
         String suffixHTML = "</font>";
        String content = "学JAVA到刘志猛博客JAVA为学习博客"; // 定义要建索的内容
        String sql = "JAVA 博客"; // 要搜索的关键字
        Hits hits = null; // Hits类――检索结果
        Query query = null;
        // RAMDirectory directory = new RAMDirectory();
        IndexWriter writer;
        try {
            writer = new IndexWriter("c:\\indexM",
                    new SmartChineseAnalyzer(), true);
            Document doc = new Document();
            doc.add(new Field("field", content, Field.Store.YES,Field.Index.TOKENIZED,Field.TermVector.WITH_OFFSETS));
            writer.addDocument(doc);
            writer.close();

        } catch (CorruptIndexException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (LockObtainFailedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }// 这要注意思下
        // new StandardAnalyzer() 是标准过虑,new WhitespaceAnalyzer() 是空格过虑
        // 如果用new WhitespaceAnalyzer() 就是把content="刘志猛 中华 人民国" 按空格来检索了
        // 这方面主知识可以 查 分析器Analysis相关内容

   
        // 建索引end

        // 查询
        IndexSearcher searcher;
        try {
            searcher = new IndexSearcher("c:\\indexM");
           
            Analyzer anlyzer=new SmartChineseAnalyzer();

              


           
            QueryParser parser = new QueryParser("field",anlyzer);
            try {
                query = parser.parse(sql);

                hits = searcher.search(query);
                for (int i = 0; i < hits.length(); i++) {
                    if (hits.length() > 0) {
                        Document document = hits.doc(i);
                        System.out.println("内容:" + document.get("field"));
                        String str = document.get("field");
                        // str = str.replaceAll(sql, "#" + sql + "#");// 在这我把关键字做了一个替换.这种方法可以模仿google
                        // 关键字变红 在这我有#替换了 如果是html页面,可以用html语言替换
                       
                        int htmlLength = prefixHTML.length()+suffixHTML.length();
                        System.out.println("高亮HTML的总长度为"+htmlLength);
                        SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter(prefixHTML, suffixHTML);
                        Highlighter highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(query));
                        String highLightText;
                        try {
                            highLightText = highlighter.getBestFragment(anlyzer,"field",str);
                            System.out.println("★高亮显示第 "+(i+1) +" 条检索结果如下所示:");
                            System.out.println(highLightText);
                            System.out.println("显示第 "+(i+1) +" 条检索结果摘要的长度为(含高亮HTML代码):"+highLightText.length());

                            System.out.println(str);
                            System.out.println("+++++++"+highlighter);
                        } catch (InvalidTokenOffsetsException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                   
                    } else {
                        System.out.println("没有查到结!");
                    }
                }
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (CorruptIndexException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
       
   

    }

官方文章:http://www.liuzm.com/article/java/91111b.htm
官方博客:http://www.liuzm.com
分享到:
评论

相关推荐

    lucene2.9开发指南

    《Lucene2.9开发指南》是一份专为初级开发者准备的资料,旨在详细介绍如何使用开源全文搜索工具包Lucene2.9.1。Lucene作为一个强大的文本搜索库,其核心功能包括建立索引和执行搜索。以下是关于Lucene2.9开发的一些...

    lucene-highlighter-6.6.0-API文档-中文版.zip

    赠送jar包:lucene-highlighter-6.6.0.jar; 赠送原API文档:lucene-highlighter-6.6.0-javadoc.jar; 赠送源代码:lucene-highlighter-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-highlighter-6.6.0.pom;...

    自己修改的基于lucene.net 2.9和highlighter插件的简单例子

    在"DesktopSearch1"这个项目中,可能包含了一个简单的桌面搜索应用,这个应用使用Lucene.NET 2.9进行索引和搜索,同时利用Highlighter插件来高亮显示搜索结果。开发者可能已经对原版的Lucene.NET和Highlighter插件...

    lucene.NET 中文分词

    **Lucene.NET 中文分词技术详解** Lucene.NET 是一个高性能、全文检索库,它是Apache Lucene项目在.NET平台上的实现。作为一个开源的搜索引擎框架,Lucene.NET为开发者提供了强大的文本搜索功能。而在处理中文文档...

    Lucene+HighLighter高亮显示实例

    《Lucene+HighLighter高亮显示实例解析》 在信息技术领域,搜索引擎的构建与优化是至关重要的一环,其中,如何有效地对搜索结果进行高亮显示,以突出关键信息,是提升用户体验的关键因素之一。本篇文章将深入探讨...

    lucene-highlighter.jar

    lucene-highlighter.jar lucene-highlighter.jar

    lucene 2.9

    1. **分词引擎**:Lucene 2.9 强化了对中文的分词支持,采用了高效的分词算法,如IK分词器或HanLP,能够精准地将中文文本切割为可索引的基本单位,提高了搜索的准确性。这对于中文信息检索至关重要,因为正确的分词...

    lucene-highlighter-7.3.1-API文档-中英对照版.zip

    包含翻译后的API文档:lucene-highlighter-7.3.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-highlighter:7.3.1; 标签:apache、lucene、highlighter、中英对照文档、jar...

    Lucene2.9英文API

    **Lucene 2.9 API 深度解析** Lucene 是一个开源的全文检索库,由Apache软件基金会开发并维护。它为开发者提供了一种高效、可扩展的搜索引擎架构,使得在各种应用中实现复杂的全文搜索功能成为可能。本文将深入探讨...

    lucene-highlighter-7.7.0-API文档-中文版.zip

    赠送jar包:lucene-highlighter-7.7.0.jar; 赠送原API文档:lucene-highlighter-7.7.0-javadoc.jar; 赠送源代码:lucene-highlighter-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-highlighter-7.7.0.pom;...

    lucene-highlighter-7.2.1-API文档-中文版.zip

    赠送jar包:lucene-highlighter-7.2.1.jar; 赠送原API文档:lucene-highlighter-7.2.1-javadoc.jar; 赠送源代码:lucene-highlighter-7.2.1-sources.jar; 赠送Maven依赖信息文件:lucene-highlighter-7.2.1.pom;...

    lucene-highlighter-7.3.1-API文档-中文版.zip

    赠送jar包:lucene-highlighter-7.3.1.jar; 赠送原API文档:lucene-highlighter-7.3.1-javadoc.jar; 赠送源代码:lucene-highlighter-7.3.1-sources.jar; 赠送Maven依赖信息文件:lucene-highlighter-7.3.1.pom;...

    Lucene 2.9 API CHM 官方API学习资料电子书

    lucene 2.9 API , lucene API,lucene 学习资料,lucene2.9 CHM

    lucene-highlighter-4.3.0.jar

    lucene-highlighter-4.3.0.jar

    lucene-highlighter-3.6.1.jar

    实现中文分词的jar包:lucene-highlighter-3.6.1.jar

    Lucene.Net+盘古分词C# Demo

    Lucene.Net+盘古分词是一个常见的中文信息检索组合。但是随着盘古分词停止更新,与Lucene.Net3.0无法兼容。为了使得大家少走弯路,本人利用Lucene.Net2.9+盘古分词2.3搭建了一个Demo,里面包含了两个模块的源码,方便...

    lucene-highlighter-3.4.0.jar

    在实际开发中,开发者可以使用Lucene Highlighter来增强搜索引擎的结果展示,例如,在新闻网站的搜索功能中,当用户输入关键词后,返回的新闻摘要将自动高亮显示关键词,使用户能够快速了解新闻内容。 总结,Lucene...

    Lucene5学习之Highlighte关键字高亮

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

    Lucene建索引及查询关键字

    在Eclipse环境中运用java,Lucene建索引及查询关键字

    lucene-highlighter-3.0.1.jar

    lucene-highlighter-3.0.1.jar 还在为找不到jar文件烦心吗,不用了到我空间来有你想要的,持续更新。

Global site tag (gtag.js) - Google Analytics