热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

solr高亮功能

高亮功能,一直是全文检索框架必备的一个功能,大大提高了用户界面的友好性,散仙在前面基于lucene的文章里,已经写过关于lu

高亮功能,一直是全文检索框架必备的一个功能,大大提高了用户界面的友好性,散仙在前面基于lucene的文章里,已经写过关于lucene中的高亮实现,那么,今天呢,我们就来看下如何使用solrj在solr中实现关键字高亮?
solr不愧是封装了lucene的企业级搜索引用,所有功能的实现都非常简单明了,在solr中关于高亮的实现一般有2种方式,第一种基于xml配置的方式,只需配置solrconifg.xml文件中的高亮组件即可,这种方式,散仙没用过,在这里就不多涉及了,下面就来重点介绍下如何在solrj中实现高亮的功能。

schemal里面的配置如下:





solrconfig.xml里面无需配置,另外注意在schemal设置默认的查询操作符为OR

Java代码  收藏代码
  1. "OR"/>  



下面,我们来看下,3条测试数据:



配置的IK同义词库内容如下:

Java代码  收藏代码
  1. 祖国,中国,China  
  2. 搜索,lucene  

祖国,中国,China
搜索,lucene


scheaml里面,IK分词器的配置如下:

Xml代码  收藏代码
  1. <fieldType name&#61;"text" class&#61;"solr.TextField" positionIncrementGap&#61;"100" >            
  2.  <analyzer type&#61;"index" >           
  3.   <tokenizer class&#61;"org.wltea.analyzer.lucene.IKTokenizerFactory" isMaxWordLength&#61;"false"  useSmart&#61;"true"   dicPath&#61;"ext.txt" />    
  4.   <filter class&#61;"solr.StopFilterFactory" ignoreCase&#61;"true" words&#61;"stopwords.txt" enablePositionIncrements&#61;"true" />    
  5.   


    核心的solrj代码如下&#xff1a;

    Java代码  收藏代码
    1. /** 
    2.     * 搜索技术交流群&#xff1a;324714439 
    3.     *  
    4.     * &#64;param str 检索的内容 
    5.     * **/  
    6.    public void queryHighlight(String str)throws Exception{  
    7.          
    8.        SolrQuery query&#61;new SolrQuery();  
    9.        query.set("q""pname:"&#43;str);//高亮查询字段  
    10.        query.setHighlight(true);//开启高亮功能  
    11.        //query.setHighlightSnippets(10);  
    12.        query.addHighlightField("pname");//高亮字段  
    13.        query.setHighlightSimplePre("");//渲染标签  
    14.        query.setHighlightSimplePost("");//渲染标签  
    15.        QueryResponse qr&#61;server.query(query);//执行查询  
    16.        SolrDocumentList dlist&#61;qr.getResults();  
    17.      //第一个Map的键是文档的ID&#xff0c;第二个Map的键是高亮显示的字段名    
    18.       Map>> map &#61; qr.getHighlighting();    
    19.       for(int i&#61;0;i
    20.           SolrDocument d&#61;dlist.get(i);//获取每一个document  
    21.           System.out.println(map.get(d.get("id")).get("pname"));//打印高亮的内容  
    22.       }    
    23.    }  

    /*** 搜索技术交流群&#xff1a;324714439* * &#64;param str 检索的内容* **/public void queryHighlight(String str)throws Exception{SolrQuery query&#61;new SolrQuery();query.set("q", "pname:"&#43;str);//高亮查询字段query.setHighlight(true);//开启高亮功能//query.setHighlightSnippets(10);query.addHighlightField("pname");//高亮字段query.setHighlightSimplePre("");//渲染标签query.setHighlightSimplePost("");//渲染标签QueryResponse qr&#61;server.query(query);//执行查询SolrDocumentList dlist&#61;qr.getResults();//第一个Map的键是文档的ID&#xff0c;第二个Map的键是高亮显示的字段名 Map>> map &#61; qr.getHighlighting(); for(int i&#61;0;i


    检索测试&#xff1a;搜索china的高亮结果


    检索测试&#xff1a;搜索term&#61;"搜索"的高亮结果,从索引数据里面&#xff0c;我们可以看出索引里面并没有搜索这个term&#xff0c;只在同义词里面配置它等于lucene&#xff0c;那么它会不会被如愿以偿的高亮呢&#xff1f;&#xff0c;结果如下&#xff1a;

    Java代码  收藏代码
    1. 2014-3-20 19:58:23 org.apache.solr.client.solrj.impl.HttpClientUtil createClient  
    2. 信息: Creating new http client, config:maxConnections&#61;128&maxConnectionsPerHost&#61;32&followRedirects&#61;false  
    3. ["red">lucene是一个china非常优秀的全文框架]  

    2014-3-20 19:58:23 org.apache.solr.client.solrj.impl.HttpClientUtil createClient
    信息: Creating new http client, config:maxConnections&#61;128&maxConnectionsPerHost&#61;32&followRedirects&#61;false
    [lucene是一个china非常优秀的全文框架]


    我们发现&#xff0c;同义词部分&#xff0c;也可以被正确的识别与高亮&#xff0c;即使是索引里面没有这个term。
    至此&#xff0c;我们的高亮部分&#xff0c;已经可以完美的工作了。



推荐阅读
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 分享一款基于Java开发的经典贪吃蛇游戏实现
    本文介绍了一款使用Java语言开发的经典贪吃蛇游戏的实现。游戏主要由两个核心类组成:`GameFrame` 和 `GamePanel`。`GameFrame` 类负责设置游戏窗口的标题、关闭按钮以及是否允许调整窗口大小,并初始化数据模型以支持绘制操作。`GamePanel` 类则负责管理游戏中的蛇和苹果的逻辑与渲染,确保游戏的流畅运行和良好的用户体验。 ... [详细]
  • QT框架中事件循环机制及事件分发类详解
    在QT框架中,QCoreApplication类作为事件循环的核心组件,为应用程序提供了基础的事件处理机制。该类继承自QObject,负责管理和调度各种事件,确保程序能够响应用户操作和其他系统事件。通过事件循环,QCoreApplication实现了高效的事件分发和处理,使得应用程序能够保持流畅的运行状态。此外,QCoreApplication还提供了多种方法和信号槽机制,方便开发者进行事件的定制和扩展。 ... [详细]
  • 本文详细探讨了使用纯JavaScript开发经典贪吃蛇游戏的技术细节和实现方法。通过具体的代码示例,深入解析了游戏逻辑、动画效果及用户交互的实现过程,为开发者提供了宝贵的参考和实践经验。 ... [详细]
  • 在Django中提交表单时遇到值错误问题如何解决?
    在Django项目中,当用户提交包含多个选择目标的表单时,可能会遇到值错误问题。本文将探讨如何通过优化表单处理逻辑和验证机制来有效解决这一问题,确保表单数据的准确性和完整性。 ... [详细]
  • 第六章:枚举类型与switch结构的应用分析
    第六章深入探讨了枚举类型与 `switch` 结构在编程中的应用。枚举类型(`enum`)是一种将一组相关常量组织在一起的数据类型,广泛存在于多种编程语言中。例如,在 Cocoa 框架中,处理文本对齐时常用 `NSTextAlignment` 枚举来表示不同的对齐方式。通过结合 `switch` 结构,可以更清晰、高效地实现基于枚举值的逻辑分支,提高代码的可读性和维护性。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 在Android 4.4系统中,通过使用 `Intent` 对象并设置动作 `ACTION_GET_CONTENT` 或 `ACTION_OPEN_DOCUMENT`,可以从相册中选择图片并获取其路径。具体实现时,需要为 `Intent` 添加相应的类别,并处理返回的 Uri 以提取图片的文件路径。此方法适用于需要从用户相册中选择图片的应用场景,能够确保兼容性和用户体验。 ... [详细]
  • 深入解析:React与Webpack配置进阶指南(第二部分)
    在本篇进阶指南的第二部分中,我们将继续探讨 React 与 Webpack 的高级配置技巧。通过实际案例,我们将展示如何使用 React 和 Webpack 构建一个简单的 Todo 应用程序,具体包括 `TodoApp.js` 文件中的代码实现,如导入 React 和自定义组件 `TodoList`。此外,我们还将深入讲解 Webpack 配置文件的优化方法,以提升开发效率和应用性能。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
author-avatar
721252060_96ee43
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有