• 高亮显示,其实就是加入样式


    高亮
    作用:
    截取一段摘要
    高亮显示其中的关键字
    配置:
    摘要大小(字数)
    关键字的高亮效果(前缀、后缀,示例:<font color='red'>关键字</font>)
    代码:

     1 package cn.itcast.f_highlight;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import org.apache.lucene.document.Document;
     7 import org.apache.lucene.index.IndexWriter.MaxFieldLength;
     8 import org.apache.lucene.queryParser.MultiFieldQueryParser;
     9 import org.apache.lucene.queryParser.QueryParser;
    10 import org.apache.lucene.search.IndexSearcher;
    11 import org.apache.lucene.search.Query;
    12 import org.apache.lucene.search.TopDocs;
    13 import org.apache.lucene.search.highlight.Formatter;
    14 import org.apache.lucene.search.highlight.Highlighter;
    15 import org.apache.lucene.search.highlight.QueryScorer;
    16 import org.apache.lucene.search.highlight.Scorer;
    17 import org.apache.lucene.search.highlight.SimpleFragmenter;
    18 import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
    19 import org.apache.lucene.util.Version;
    20 import org.junit.Test;
    21 
    22 import cn.itcast._domain.Article;
    23 import cn.itcast._util.ArticleDocumentUtils;
    24 import cn.itcast._util.LuceneUtils;
    25 
    26 public class TestApp {
    27 
    28     // 搜索
    29     @Test
    30     public void testSearch() throws Exception {
    31         // 准备查询条件
    32         String queryString = "互联网";
    33 
    34         // 执行搜索
    35         List<Article> list = new ArrayList<Article>();
    36 
    37         // 1,把查询字符串转为Query对象(从title和content中查询)
    38         QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_30, new String[] { "title", "content" }, LuceneUtils.getAnalyzer());
    39         Query query = queryParser.parse(queryString);
    40 
    41         // 2,执行查询,得到中间结果
    42         IndexSearcher indexSearcher = new IndexSearcher(LuceneUtils.getDirectory()); // 指定所用的索引库
    43         TopDocs topDocs = indexSearcher.search(query, 100); // 最多返回前n条结果
    44 
    45         // ========================================================================================== 【创建高亮器】
    46         Query myQuery = query; // 查询条件
    47         String preTag = "<span class='keyword'>"; // 前缀
    48         String postTag = "</span>"; // 后缀
    49         int size = 20; // 摘要大小,以关键字为中心
    50 
    51         Formatter formatter = new SimpleHTMLFormatter(preTag, postTag); // 前缀、后缀
    52         Scorer scorer = new QueryScorer(myQuery);
    53         Highlighter highlighter = new Highlighter(formatter, scorer);
    54         highlighter.setTextFragmenter(new SimpleFragmenter(size)); // 摘要大小(字数)
    55         // ==========================================================================================
    56 
    57         // 3,处理结果
    58         for (int i = 0; i < topDocs.scoreDocs.length; i++) {
    59             // 根据编号拿到Document数据
    60             int docId = topDocs.scoreDocs[i].doc; // Document的内部编号
    61             Document doc = indexSearcher.doc(docId);
    62             // ======================================================================================== 【使用高亮器】
    63             // 一次高亮一个字段,返回高亮后的结果,如果要高亮的字段值中没有出现关键字,就会返回null
    64             String text = highlighter.getBestFragment(LuceneUtils.getAnalyzer(), "content", doc.get("content"));
    65             if (text != null) {
    66                 doc.getField("content").setValue(text); // 使用高亮后的文本替换原始内容
    67             }
    68             // ========================================================================================
    69 
    70             // 把Document转为Article
    71             Article article = ArticleDocumentUtils.documentToArticle(doc);
    72             list.add(article);
    73         }
    74         indexSearcher.close();
    75 
    76         // 显示结果
    77         System.out.println("总结果数:" + list.size());
    78         for (Article a : list) {
    79             System.out.println("------------------------------");
    80             System.out.println("id = " + a.getId());
    81             System.out.println("title = " + a.getTitle());
    82             System.out.println("content = " + a.getContent());
    83         }
    84     }
    85 }
  • 相关阅读:
    bootstrap收费模版,里面也有后台模版
    漂亮的后台设计
    table ie td宽度 bug
    何让WordPress博客首页不显示某分类的所有文章?
    WordPress不同分类使用不同列表样式
    wordpress学习笔记(一)
    Chariot主题是一款专业自适应Wordpress作品主题
    洛谷P1450 [HAOI2008]硬币购物 动态规划 + 容斥原理
    洛谷P2671 求和 数学 前缀和
    洛谷1288 取数游戏II 博弈论
  • 原文地址:https://www.cnblogs.com/friends-wf/p/3796634.html
Copyright © 2020-2023  润新知