在Spring Boot中整合Elasticsearch并实现高亮搜索

这篇具有很好参考价值的文章主要介绍了在Spring Boot中整合Elasticsearch并实现高亮搜索。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言在现代软件开发中,高效的数据搜索和检索是至关重要的。Elasticsearch作为一款强大的开源搜索引擎,为我们提供了快速、准确的搜索能力。而Spring Boot作为一种常用的Java开发框架,提供了快速构建应用程序的能力。本文将为您详细展示如何将这两者结合,通过Spring Boot实现Elasticsearch的高亮搜索功能。版本匹配的重要性在开始整合之前,我们首先要明确一个重要的问题:版本匹配。Spring Boot Data Elasticsearch提供的API与Elasticsearch的版本相关联,版本不匹配可能导致不兼容的问题。确保您的Spring Boot Data Elasticsearch版本与实际Elasticsearch服务器版本匹配,这一步至关重要。文章中建议,不仅要注意版本匹配,还要特别关注与团队提供的版本保持一致,以避免不必要的问题。实体类注解:为搜索数据做准备在开始编写代码之前,我们需要为要在Elasticsearch中搜索的数据实体类添加注解。在示例中,作者以一个名为User的实体类为例,详细解释了如何通过注解为不同字段指定索引、存储和分词等属性。这些注解将为搜索数据的准备工作奠定基础。实现高亮搜索功能的整体步骤作者在文章中提供了一个清晰的实现步骤,让读者能够轻松上手整合并实现高亮搜索功能。以下是整体步骤的概要:添加依赖:通过在项目的pom.xml文件中添加相关依赖,引入Spring Boot Data Elasticsearch的功能。配置信息:在application.properties或application.yml文件中配置Elasticsearch的连接信息。实体类注解:为要搜索的实体类添加注解,指定索引名称、字段的分词方式等属性。创建Repository:在Repository接口中定义搜索方法,用于执行搜索逻辑。编写Service:在Service层中编写搜索逻辑,使用elasticsearchRestTemplate执行搜索操作,并处理高亮字段。验证示例:通过一个RESTful API端点,演示如何使用搜索功能,并获取包含高亮字段的搜索结果。实战示例:高亮搜索效果展示在文章末尾,作者为读者提供了一个验证示例,展示了整合后的高亮搜索效果。通过调用API端点,您可以轻松搜索包含关键字的数据,并获得高亮字段的结果展示。这个实战示例不仅帮助您理解了实现步骤,还为您提供了一个实际应用的场景。前言结语本文详细阐述了如何在Spring Boot项目中整合Elasticsearch,并实现高亮搜索功能。从版本匹配的重要性到实体类注解的使用,再到整体步骤的解释,我们为您呈现了一个完整的实现过程。希望本文能够帮助您在实际项目中成功整合Spring Boot与Elasticsearch,并为您的应用程序提供强大的高亮搜索功能。本文将详细介绍如何使用Spring Boot整合Elasticsearch并实现高亮搜索功能。首先,为了确保顺利整合,需注意Spring Boot Data Elasticsearch的版本与实际Elasticsearch服务器版本的匹配。版本不匹配可能导致API不兼容,因此在开始前务必查阅官方文档确认匹配的版本。第一步:添加依赖

在项目的pom.xml文件中,添加如下依赖配置:



    org.springframework.boot
    spring-boot-starter-data-elasticsearch

第二步:修改Spring Boot配置文件

在application.properties或application.yml文件中,添加Elasticsearch的配置信息:

spring.elasticsearch.uris=http://192.168.88.187:9200
spring.data.elasticsearch.repositories.enabled=true

第三步:为操作的实体Bean添加注解

对于要操作的实体数据,在其类定义上添加相关注解,示例中是一个User类:

package com.wy.scjg.bean;

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;

@Document(indexName = "users")
public class User implements Serializable {
    /**
     * 主键ID
     */
    @Id
    private Long id;

    /**
     * 姓名
     */
    @Field(index = true, store = true, analyzer = "ik_max_word", searchAnalyzer = "ik_max_word", type = FieldType.Text)
    private String name;

    /**
     * 年龄
     */
    private Integer age;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 生日
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birth;

    private Integer did;

    // 表中不存在的字段
}

以上示例中,@Document注解用于指定索引名称,@Id注解标识主键字段。@Field注解用于指定字段的索引、存储、分词等属性。

实现高亮搜索

在使用Spring Boot Data Elasticsearch进行高亮搜索时,可以按以下步骤进行:

  1. 在Repository接口中添加方法,定义搜索逻辑。

package com.wy.scjg.repository;

import com.wy.scjg.bean.User;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface UserRepository extends ElasticsearchRepository {
    List findByName(String name);
}

在Service层调用Repository中的方法,执行搜索操作。

package com.wy.scjg.service;

import com.wy.scjg.bean.User;
import com.wy.scjg.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHit;

import java.util.List;
import java.util.stream.Collectors;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private ElasticsearchRestTemplate elasticsearchRestTemplate;

    public List searchUsers(String keyword) {
        SearchHits searchHits = elasticsearchRestTemplate.search(
                elasticsearchQueryService -> elasticsearchQueryService
                        .forPageable(PageRequest.of(0, 10))
                        .highlightFields(highlightBuilder ->
                                highlightBuilder.field("name"))
                        .must(QueryBuilders.matchQuery("name", keyword)),
                User.class
        );

        return searchHits.get().map(SearchHit::getContent).collect(Collectors.toList());
    }
}

以上示例中,UserService中的searchUsers方法使用elasticsearchRestTemplate执行搜索操作,并添加了高亮字段。

验证示例

接下来,我们通过一个简单的验证示例来演示上述步骤的整合效果。假设我们在Elasticsearch中已经有一批用户数据,现在我们要在这些数据中搜索并高亮显示包含某关键字的用户名。

@RestController
@RequestMapping("/api")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/search")
    public List searchUsers(@RequestParam String keyword) {
        return userService.searchUsers(keyword);
    }
}

在这个示例中,我们创建了一个RESTful API端点,通过传递关键字参数来执行用户搜索。搜索结果会返回一个包含高亮字段的用户列表。

这篇文章详细介绍了如何在Spring Boot中整合Elasticsearch,并实现了高亮搜索的功能。通过添加依赖、配置Spring Boot以及在实体类中添加注解,我们能够轻松地操作Elasticsearch中的数据。同时,我们还演示了如何在Service层实现高亮搜索,并提供了一个简单的验证示例来展示整合的效果。希望这篇文章能够帮助你成功实现Spring Boot与Elasticsearch的整合和高亮搜索功能。

当然,接下来我们将继续完善验证示例,并说明如何在该示例中实现高亮搜索的效果。

验证示例

在上文中,我们创建了一个UserController,其中包含一个用于搜索用户的RESTful API端点。现在,我们将在这个端点中实现高亮搜索的功能。

@RestController
@RequestMapping("/api")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/search")
    public List
> searchUsers(@RequestParam String keyword) {         List users = userService.searchUsers(keyword);                  // 将搜索结果转换为包含高亮字段的Map列表         List
> highlightedUsers = users.stream()                 .map(user -> {                     Map userMap = new HashMap();                     userMap.put("id", user.getId());                                          // 获取高亮字段                     HighlightField highlightField = user.getHighlightFields().get("name");                     if (highlightField != null) {                         userMap.put("name", highlightField.fragments()[0].toString());                     } else {                         userMap.put("name", user.getName());                     }                                          userMap.put("age", user.getAge());                     userMap.put("email", user.getEmail());                     userMap.put("birth", user.getBirth());                     userMap.put("did", user.getDid());                                          return userMap;                 })                 .collect(Collectors.toList());         return highlightedUsers;     } }

在上述示例中,我们通过userService调用searchUsers方法来获取包含高亮字段的用户列表。对于每个用户,我们会检查其highlightFields,获取名为“name”的高亮字段,如果存在,就使用高亮的文本,否则使用原始的文本。最后,将转换后的用户列表返回给API调用者。

通过这个验证示例,我们已经成功地实现了在Spring Boot中整合Elasticsearch并进行高亮搜索的功能。现在,你可以通过调用/api/search?keyword=关键字的API端点来搜索并获取包含高亮字段的用户列表。

这篇文章详细地介绍了如何在Spring Boot项目中整合Elasticsearch,实现高亮搜索功能,并通过验证示例展示了整合效果。希望这篇文章对你有所帮助,让你更好地理解如何在实际项目中应用这些概念和技术。文章来源地址https://www.toymoban.com/news/detail-458386.html

到了这里,关于在Spring Boot中整合Elasticsearch并实现高亮搜索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot 集成 ElasticSearch:实现模糊查询、批量 CRUD、排序、分页和高亮功能

    文章来源:https://blog.csdn.net/qq_52355487/article/details/123805713 在pom.xml里加入如下依赖 非常重要:检查依赖版本是否与你当前所用的版本是否一致,如果不一致,会连接失败! 1.创建、判断存在、删除索引 2.对文档的CRUD 创建文档: 注意:如果添加时不指定文档ID,他就会随机生成

    2024年02月04日
    浏览(28)
  • ElasticSearch系列 - SpringBoot整合ES:实现搜索结果排序 sort

    00. 数据准备 01. Elasticsearch 默认的排序方式是什么? ElasticSearch 默认的排序方式是相关性排序。相关性排序是根据查询条件与文档的匹配程度来计算每个文档的相关性得分,然后按照得分从高到低进行排序。相关性排序是 ElasticSearch 中最常用的排序方式,因为它可以根据查询

    2024年02月02日
    浏览(35)
  • Spring Boot整合Postgres实现轻量级全文搜索

    有这样一个带有搜索功能的用户界面需求: 搜索流程如下所示: 这个需求涉及两个实体: “评分(Rating)、用户名(Username)”数据与 User 实体相关 “创建日期(create date)、观看次数(number of views)、标题(title)、正文(body)”与 Story 实体相关 需要支持的功能对 User

    2024年02月19日
    浏览(26)
  • [Spring Boot]12 ElasticSearch实现分词搜索功能

    我们在使用搜索功能的时候,有时,为了使搜索的结果更多更广,比如搜索字符串“领导力”,希望有这些组合的结果(领导力、领导、领、导、力)都要能够全部展示出来。 这里我们引入ElasticSearch结合分词插件,来实现这样的搜索功能。 比如:一款app需要对“课程”进行

    2024年02月03日
    浏览(33)
  • Spring Boot 整合 分布式搜索引擎 Elastic Search 实现 搜索、分页与结果过滤

    本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 实现黑马旅游的酒店搜索功能,完成搜索和分页 在项目首页,有一个很大的搜索框、也有分页按钮 点击搜索按钮,可以

    2024年02月06日
    浏览(36)
  • Spring Boot 整合 分布式搜索引擎 Elastic Search 实现 数据聚合

    本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 本篇文章将讲解 Elastic Search 如何实现数据聚合,以及 在项目实战中如何通过数据聚合实现业务需求并完成功能。 以下为官方

    2024年02月11日
    浏览(32)
  • Spring Boot 中使用 Elasticsearch 实现商品搜索功能

    作者:禅与计算机程序设计艺术 Elasticsearch 是开源分布式搜索引擎,它提供了一个分布式、RESTful 搜索接口。基于 Elasticsearch 的搜索方案能够轻松应对复杂的检索场景并提供高扩展性。在 Web 应用中,Elasticsearch 可以作为后台服务支持用户的检索需求。本文将会教你如何使用

    2024年02月06日
    浏览(35)
  • Elasticsearch (ES) 搜索引擎: 文本搜索:分析器/分词器、同义词/停用词、拼音搜索、高亮显示、拼写纠错

    原文链接:https://xiets.blog.csdn.net/article/details/132349032 版权声明:原创文章禁止转载 专栏目录:Elasticsearch 专栏(总目录) 文本搜索主要指的就是全文搜索,全文搜索是搜索引擎的核心功能,与精确匹配的结构化数据不同,文本(text)数据在构建索引和搜索时都需要进行额外的处

    2024年02月03日
    浏览(43)
  • ElasticSearch系列 - SpringBoot整合ES:实现分页搜索 from+size、search after、scroll

    01. 数据准备 ElasticSearch 向 my_index 索引中索引了 12 条文档: 02. ElasticSearch 如何查询所有文档? ElasticSearch 查询所有文档 根据查询结果可以看出,集群中总共有12个文档,hits.total.value=12, 但是在 hits 数组中只有 10 个文档。如何才能看到其他的文档? 03. ElasticSearch 如何指定搜

    2023年04月08日
    浏览(26)
  • spring boot使用elasticsearch分词,排序,分页,高亮简单示例

    记,写一个简单的es分词demo,es版本6.8.12 如果使用es7有些方法可能会有所改变,请参考7的文档 es安装教程:http://t.csdn.cn/BSh12 怎么简单怎么来 商品名称加了 @Field(type = FieldType.Text, analyzer = “ik_max_word”) 会自动分词 分页处理 3.2.1 分词 当输入衣服鞋子的时候会将分

    2024年02月08日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包