SpringDataElasticsearch 使用@Highlight注解配合@HighlightParameters注解自定义高亮返回

文章目录

  • 项目场景
  • 项目依赖版本
  • 注解使用方式如下
  • 响应结果示例
  • 效果截图
  • 针对响应数据说明(2022-07-01)

项目场景

本文只分享注解实现高亮相关内容

项目中有用到全文检索功能,要求关键字高亮显示;之前找过相关内容,但是都是需要自己去构建query参数,我个人觉得比较麻烦就去 官方文档中找到了以注解的方式去实现高亮功能。

项目依赖版本

<parent>
   <groupId>org.springframework.bootgroupId>
   <artifactId>spring-boot-starter-parentartifactId>
   <version>2.3.5.RELEASEversion>
   <relativePath/> 
parent>

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-data-elasticsearchartifactId>
dependency>

注解使用方式如下

import com.focustar.entity.custom.TKmsAttachmentCustom;
import org.springframework.data.elasticsearch.annotations.Highlight;
import org.springframework.data.elasticsearch.annotations.HighlightField;
import org.springframework.data.elasticsearch.annotations.HighlightParameters;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

import java.util.List;

/**
 * Spring Data Elasticsearch 基于 Repository 的实现
 *
 * @author 天玺
 * @date 2021/02/02 9:45
 */
public interface TKmsAttachmentCustomRepository extends ElasticsearchRepository<TKmsAttachmentCustom, Long> {

    /**
     * 查询内容标题查询
     * @param title 标题
     * @param content 内容
     * @return 返回关键字高亮的结果集
     */
    @Highlight(
        fields = {@HighlightField(name = "title"), @HighlightField(name = "content")},
        parameters = @HighlightParameters(preTags = {""}, postTags = {""}, numberOfFragments = 0)
    )
    List<SearchHit<TKmsAttachmentCustom>> findByTitleOrContent(String title, String content);

}

首先第一个注解 @Highlight 是代表当前查询方法需要高亮返回,
通过指定里边的fields (传入注解@HighlightField)来指定要高亮的字段,
上边代码中就代表要高亮 title字段和content字段。如果不指定 parameters 属性,则默认使用 em 标签包裹匹配的关键字。
配合parameters属性(传入注解@HighlightParameters)可以指定高亮方式,
preTags 指定匹配关键字之前的标签,postTags 指定匹配关键字之后的标签;
例如上边我指定的分别是 ,那么效果就是  搜索后匹配的关键字 。
设置numberOfFragments可以指定返回的片段数,默认是返回全部片段,设置为3返回3个片段,设置为0返回一个片段,包含全部内容,也就是 SearchHit中的highlightFields全部显示。

关于上述内容在官方的文档中都有提到:点击直接查看官方文档对于该注解的说明。


响应结果示例

[
    {
      "id": "161",
      "score": 4.515768,
      "sortValues": [],
      "content": {
        "pid": 161,
        "vdnId": 1,
        "itemPID": 125,
        "title": "知识库导入模板2",
        "keyWords": null,
        "fileType": "xlsx",
        "fileName": "/files/xlsx/2021-01-06/edd82c7abbd347feb56e69d41a07f148.xlsx",
        "htmlFileName": "/files/html/2021-01-06/95fa94eb69af45ac98828da07c9d18f1.html",
        "isItem": 0,
        "content": "

第一个知识的内容,剩余部分是不一致的

", "createTime": "2020-12-11 16:36:44", "readCount": 0, "evaluateCount": 0, "deployTime": null }, "highlightFields": { "title": [ "导入模板2" ], "content": [ "

第一个的内容,剩余部分是不一致的

" ] } }, { "id": "50", "score": 1.1365668, "sortValues": [], "content": { "pid": 50, "vdnId": 1, "itemPID": 92, "title": "测试2", "keyWords": null, "fileType": "html", "fileName": "/files/html/2020-12-01/70ad3c12d0c449419630814998a33ed8.html", "htmlFileName": "/files/html/2020-12-01/70ad3c12d0c449419630814998a33ed8.html", "isItem": 1, "content": "
\n

简介

\n编辑
\n
\n
知识库管理系统
\n知识库的概念来自两个不同的领域,一个是人工智能及其分支-知识工程领域,另一个是传统的数据库领域。由人工智能(AI)和数据库(DB)两项计算机技术的有机结合,促成了知识库系统的产生和发展。
\n
知识库是基于知识且具有智能性的系统(或专家系统)。并不是所有具有智能的程序都拥有知识库,只有基于知识的系统才拥有知识库。许多应用程序都利用知识,其中有的还达到了很高的水平,但是,这些应用程序可能并不是基于知识的系统,它们也不拥有知识库。一般的应用程序与基于知识的系统之间的区别在于:一般的应用程序是把问题求解的知识隐含地编码在程序中,而基于知识的系统则将应用领域的问题求解知识显式地表达,并单独地组成一个相对独立的程序实体。
\n
\n
\n

发展

\n编辑
\n
1956年,shannon等人在DaitMouth学院举行机器智能研讨会,从此人工智能(AI)诞生了。作为智能的基础,知识是不可缺的。在捕述问题时仅用过程性方法是不够的,有时还必须使用说明性方法以及过去积累的经验知识。同时解决问题时单纯寻找高效率的搜索求解方法,而不考虑由于组合数的无限增加而导致搜索量的增加也是不切合实际的。因此,与高效的搜索方法相比,知识显现出其独特的重要性。知识型的人工智能是从知识系统开始的。知识系统是基于知识对实际问题进行求解的系统,它的核心部件是知识库。知识库中的知识是高度结构化的符号数据。知识系统的性能取决于知识库中的知识质量(结构、完备性、有效性、一致性)以及使用知识的方式(推理)。从以搜索为主的人工智能发展到以知识为主的人工智能,这个发展可以看作是人工智能发展中的一大突破性进展。扩大智能是20世纪90年代计算机技术发展的趋势,而知识库技术会使计算机应用系统具有更多的智能,因此成为了计算机智能化研究的前沿。知识库是第五代计算机的核心部分,同时又是智能控制系统、智能机器人、智能决策支持系统、专家系统等现代计算机技术系统的关键部件和基础。 [2] 
\n
\n
\n

特点

\n编辑
\n
1、知识库中的知识根据它们的应用领域特征、背景特征(获取时的背景信息)、使用特征、属性特征等而被构成便于利用的、有结构的组织形式。知识片一般是模块化的。
\n
2、知识库的知识是有层次的。最低层是“事实知识”,中间层是用来控制“事实”的知识(通常用规则、过程等表示);最高层次是“策略”,它以中间层知识为控制对象。策略也常常被认为是规则的规则。因此知识库的基本结构是层次结构,是由其知识本身的特性所确定的。在知识库中,知识片间通常都存在相互依赖关系。规则是最典型、最常用的一种知识片。
\n
\n
知识库系统运作流程
\n3、知识库中可有一种不只属于某一层次(或者说在任一层次都存在)的特殊形式的知识——可信度(或称信任度,置信测度等)。对某一问题,有关事实、规则和策略都可标以可信度。这样,就形成了增广知识库。在数据库中不存在不确定性度量。因为在数据库的处理中一切都属于“确定型”的。
\n
4、知识库中还可存在一个通常被称作典型方法库的特殊部分。如果对于某些问题的解决途径是肯定和必然的,就可以把其作为一部分相当肯定的问题解决途径直接存储在典型方法库中。这种宏观的存储将构成知识库的另一部分。在使用这部分时,机器推理将只限于选用典型方法库中的某一层体部分。
\n
\n
\n

优越性

\n编辑
\n
⑴可在较低价格下构造较大的知识库;
\n
⑵不同层次或不同领域的知识库对应的问题求解任务相对来说比较单纯,因而可以构成较高效的系统;
\n
⑶可适于地域辽阔的地理分布
\n
知识库的构造必须使得其中的知识在被使用的过程中能够有效地存取和搜索,库中的知识能方便地修改和编辑,同时,对库中知识的一致性和完备性能进行检验。
\n
\n
\n

功能

\n编辑
\n
1.知识库使信息和知识有序化,是知识库对组织的首要贡献。
\n
\n
知识库系统的功能
\n建立知识库,必定要对原有的信息和知识做一次大规模的收集和整理,按照一定的方法进行分类保存,并提供相应的检索手段。经过这样一番处理,大量隐含知识被编码化和数字化,信息和知识便从原来的混乱状态变得有序化。这样就方便了信息和知识的检索,并为有效使用打下了基础。
\n
2.知识库加快知识和信息的流动,有利于知识共享与交流。
\n
知识和信息实现了有序化,其寻找和利用时间大大减少,也便自然加快了流动。另外,由于在企业的内部网上可以开设一些时事、新闻性质的栏目,使企业内外发生的事能够迅速传遍整个企业,这就使人们获得新信息和新知识的速度大大加快。
\n
3.知识库还有利于实现组织的协作沟通
\n
例如,施乐公司的知识库可将员工的建议存入。员工在工作中解决了一个难题或发现了处理某件事更好的方法后,可以把这个建议提交给一个由专家组成的评审小组。评审小组对这些建议进行审核,把最好的建议存入知识库。建议中注明建议者的姓名,以保证提交建议的质量,并保护员工提交建议的积极性。
\n
4.知识库可以帮助企业实现对客户知识的有效管理。
\n
企业销售部门的信息管理一直是比较复杂的工作,一般老的销售人员拥有很多宝贵的信息,但随着他们客户的转变或工作的调动,这些信息和知识便会损失。因此,企业知识库的一个重要内容就是将客户的所有信息进行保存,以方便新的业务人员随时利用。
", "createTime": "2021-02-02 09:33:02", "readCount": 36, "evaluateCount": 0, "deployTime": "2021-02-02 09:33:16" }, "highlightFields": { "content": [ "
\n

简介

\n编辑
\n
\n
管理系统
\n的概念来自两个不同的领域,一个是人工智能及其分支-工程领域,另一个是传统的数据领域。由人工智能(AI)和数据(DB)两项计算机技术的有机结合,促成了系统的产生和发展。
\n
是基于且具有智能性的系统(或专家系统)。并不是所有具有智能的程序都拥有,只有基于的系统才拥有。许多应用程序都利用,其中有的还达到了很高的水平,但是,这些应用程序可能并不是基于的系统,它们也不拥有。一般的应用程序与基于的系统之间的区别在于:一般的应用程序是把问题求解的隐含地编码在程序中,而基于的系统则将应用领域的问题求解显式地表达,并单独地组成一个相对独立的程序实体。
\n
\n
\n

发展

\n编辑
\n
1956年,shannon等人在DaitMouth学院举行机器智能研讨会,从此人工智能(AI)诞生了。作为智能的基础,是不可缺的。在捕述问题时仅用过程性方法是不够的,有时还必须使用说明性方法以及过去积累的经验。同时解决问题时单纯寻找高效率的搜索求解方法,而不考虑由于组合数的无限增加而导致搜索量的增加也是不切合实际的。因此,与高效的搜索方法相比,显现出其独特的重要性。型的人工智能是从系统开始的。系统是基于对实际问题进行求解的系统,它的核心部件是中的是高度结构化的符号数据。系统的性能取决于中的质量(结构、完备性、有效性、一致性)以及使用的方式(推理)。从以搜索为主的人工智能发展到以为主的人工智能,这个发展可以看作是人工智能发展中的一大突破性进展。扩大智能是20世纪90年代计算机技术发展的趋势,而技术会使计算机应用系统具有更多的智能,因此成为了计算机智能化研究的前沿。是第五代计算机的核心部分,同时又是智能控制系统、智能机器人、智能决策支持系统、专家系统等现代计算机技术系统的关键部件和基础。 [2] 
\n
\n
\n

特点

\n编辑
\n
1、中的根据它们的应用领域特征、背景特征(获取时的背景信息)、使用特征、属性特征等而被构成便于利用的、有结构的组织形式。片一般是模块化的。
\n
2、是有层次的。最低层是“事实”,中间层是用来控制“事实”的(通常用规则、过程等表示);最高层次是“策略”,它以中间层为控制对象。策略也常常被认为是规则的规则。因此的基本结构是层次结构,是由其本身的特性所确定的。在中,片间通常都存在相互依赖关系。规则是最典型、最常用的一种片。
\n
\n
系统运作流程
\n3、中可有一种不只属于某一层次(或者说在任一层次都存在)的特殊形式的——可信度(或称信任度,置信测度等)。对某一问题,有关事实、规则和策略都可标以可信度。这样,就形成了增广。在数据中不存在不确定性度量。因为在数据的处理中一切都属于“确定型”的。
\n
4、中还可存在一个通常被称作典型方法的特殊部分。如果对于某些问题的解决途径是肯定和必然的,就可以把其作为一部分相当肯定的问题解决途径直接存储在典型方法中。这种宏观的存储将构成的另一部分。在使用这部分时,机器推理将只限于选用典型方法中的某一层体部分。
\n
\n
\n

优越性

\n编辑
\n
⑴可在较低价格下构造较大的
\n
⑵不同层次或不同领域的对应的问题求解任务相对来说比较单纯,因而可以构成较高效的系统;
\n
⑶可适于地域辽阔的地理分布
\n
的构造必须使得其中的在被使用的过程中能够有效地存取和搜索,中的能方便地修改和编辑,同时,对的一致性和完备性能进行检验。
\n
\n
\n

功能

\n编辑
\n
1.使信息和有序化,是对组织的首要贡献。
\n
\n
系统的功能
\n建立,必定要对原有的信息和做一次大规模的收集和整理,按照一定的方法进行分类保存,并提供相应的检索手段。经过这样一番处理,大量隐含被编码化和数字化,信息和便从原来的混乱状态变得有序化。这样就方便了信息和的检索,并为有效使用打下了基础。
\n
2.加快和信息的流动,有利于共享与交流。
\n
和信息实现了有序化,其寻找和利用时间大大减少,也便自然加快了流动。另外,由于在企业的内部网上可以开设一些时事、新闻性质的栏目,使企业内外发生的事能够迅速传遍整个企业,这就使人们获得新信息和新的速度大大加快。
\n
3.还有利于实现组织的协作沟通
\n
例如,施乐公司可将员工的建议存入。员工在工作中解决了一个难题或发现了处理某件事更好的方法后,可以把这个建议提交给一个由专家组成的评审小组。评审小组对这些建议进行审核,把最好的建议存入。建议中注明建议者的姓名,以保证提交建议的质量,并保护员工提交建议的积极性。
\n
4.可以帮助企业实现对客户的有效管理。
\n
企业销售部门的信息管理一直是比较复杂的工作,一般老的销售人员拥有很多宝贵的信息,但随着他们客户的转变或工作的调动,这些信息和便会损失。因此,企业的一个重要内容就是将客户的所有信息进行保存,以方便新的业务人员随时利用。
" ] } } ]

效果截图

SpringDataElasticsearch 使用@Highlight注解配合@HighlightParameters注解自定义高亮返回_第1张图片

针对响应数据说明(2022-07-01)

SpringDataElasticsearch 使用@Highlight注解配合@HighlightParameters注解自定义高亮返回_第2张图片

你可能感兴趣的:(java,spring,spring,boot)