从零搭建Web所需服务(五)& 从零搭建微服务SpringCloud(番外)微服务集成ES分词服务

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 本文作为从零搭建Web所需服务系列的第五篇及从零搭建微服务SpringCloud系列的番外篇,捞干介绍如何通过微服务集成ES分词服务。

1、启动ES

image.png

参考文献: 从零搭建Web所需服务(一)Windows下Elasticsearch环境搭建和介绍

2、导入Elasticsearch相关依赖

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>transport</artifactId>
    <version>6.2.2</version>
</dependency>
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-client</artifactId>
    <version>7.6.2</version>
</dependency>

3、配置application.yml

server:
  port: 1070  #暴露的端口
spring:
  application:
    name: ES
es-config:  #自定义配置Es参数,可以自定义 es-config 这个名称,例如下面
  esname: my-application
  esip: 127.0.0.1
  esnodes: 9300
#es-config-two:
#  esname: my-application
#  esip: 127.0.0.1
#  esnodes: 9300

4、配置ConfigurationFileModel

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import java.net.InetAddress;

@Component
//获取application.yml文件中配置的叫 “es-config” 的参数值,并注入到类中
@ConfigurationProperties(prefix = "es-config")
public class ConfigurationFileModel {

    //无参构造
    public ConfigurationFileModel() {
        super();
    }
    //Get-Set方法进行传值
    public String getEsName() {
        return esName;
    }
    public void setEsName(String esName) {
        this.esName = esName;
    }
    public String getEsIp() {
        return esIp;
    }
    public void setEsIp(String esIp) {
        this.esIp = esIp;
    }
    public int getEsNodes() {
        return esNodes;
    }
    public void setEsNodes(int esNodes) {
        this.esNodes = esNodes;
    }
    //有参构造
    public ConfigurationFileModel(String esName, String esIp, int esNodes) {
        this.esName = esName;
        this.esIp = esIp;
        this.esNodes = esNodes;
    }
    //成员变量
    private String esName;
    private String esIp;
    private int esNodes;

    @Bean
    //作者此方案为非标准配置方式,注意业务开发时将@Bean书写到总配置类中
    public TransportClient client(){
        TransportClient client=null;
        try {
            Settings settings=Settings.builder().put("cluster.name",esName).build();
            client = new PreBuiltTransportClient(settings).addTransportAddresses(new TransportAddress(InetAddress.getByName(esIp), esNodes));
            return client;
        }catch (Exception e){
            return null;
        }
    }

}

5、配置ESController

import org.elasticsearch.action.admin.indices.analyze.AnalyzeRequest;
import org.elasticsearch.action.admin.indices.analyze.AnalyzeResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;


@Configuration
@RestController
@CrossOrigin
@RequestMapping("/es")
public class ESController {
    @Autowired
    ConfigurationFileModel configurationFileModel;
    @GetMapping("/esRequest")
    public void vivi(String one){
        AnalyzeRequest request = (new AnalyzeRequest(null)).analyzer("ik_max_word").text(one);
        List<AnalyzeResponse.AnalyzeToken> tokens = configurationFileModel.client().admin().indices().analyze(request).actionGet().getTokens();
        for (int i=0;i<tokens.size();i++){
            System.out.print(tokens.get(i).getTerm()+"-");
        }
    }
}

6、配置ESServerStart

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
//@EnableConfigurationProperties(ConfigurationFileModel.class) //具体的作用就不介绍了,可以看下这篇文章
/**
 * 关于@EnableConfigurationProperties注解的使用
 * https://blog.csdn.net/wanghuiwei888/article/details/121054828
 * */
public class ESServerStart {
    public static void main(String[] args) {
        SpringApplication.run(ESServerStart.class);
    }
}

7、启动测试

image.png

http://localhost:1070/es/esRequest?str=%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD

image.png

成功


相关文档

从零搭建Web所需服务(一)Windows下Elasticsearch环境搭建和介绍
从零搭建微服务SpringCloud(四)设计SpringCloud服务提供者

相关实践学习
利用Elasticsearch实现地理位置查询
本实验将分别介绍如何使用Elasticsearch7.10版本进行全文检索、多语言检索和地理位置查询三个Elasticsearch基础检索子场景的实现。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
1天前
|
机器人 Shell 开发者
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
18 8
|
3天前
|
消息中间件 Java 开发者
Spring Cloud微服务框架:构建高可用、分布式系统的现代架构
Spring Cloud是一个开源的微服务框架,旨在帮助开发者快速构建在分布式系统环境中运行的服务。它提供了一系列工具,用于在分布式系统中配置、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等领域的支持。
20 5
|
6天前
|
Java API 开发工具
Spring Boot与Spring Cloud Config的集成
Spring Boot与Spring Cloud Config的集成
|
12天前
|
消息中间件 负载均衡 Java
最容易学会的springboot gralde spring cloud 多模块微服务项目
最容易学会的springboot gralde spring cloud 多模块微服务项目
|
13天前
|
开发框架 安全 .NET
使用VB.NET构建Web服务和REST API的指南
【7月更文挑战第2天】使用VB.NET构建Web服务和REST API的指南:从Web服务基础到ASP.NET Core实践,涵盖控制器、路由、模型绑定、安全措施(如JWT、HTTPS)及测试、部署(Azure、Docker)与监控工具。了解如何利用VB.NET在现代云环境中创建高效、安全的API。开始你的VB.NET Web服务开发之旅!**
15 1
|
6天前
|
消息中间件 供应链 Java
实现基于Spring Cloud的事件驱动微服务
实现基于Spring Cloud的事件驱动微服务
|
10天前
|
微服务
SpringCloud01微服务课程导学,微服务功能用户,支付,购物车,积分,优惠卷,短信功能越来越多
SpringCloud01微服务课程导学,微服务功能用户,支付,购物车,积分,优惠卷,短信功能越来越多
|
12天前
|
Java API 网络架构
Spring Boot与Spring Cloud Gateway的集成
Spring Boot与Spring Cloud Gateway的集成
|
13天前
|
负载均衡 Java 开发者
Spring Cloud微服务架构中的配置管理与服务发现
Spring Cloud微服务架构中的配置管理与服务发现
|
1月前
|
人工智能 Java Spring
使用 Spring Cloud Alibaba AI 构建 RAG 应用
本文介绍了RAG(Retrieval Augmented Generation)技术,它结合了检索和生成模型以提供更准确的AI响应。示例中,数据集(包含啤酒信息)被加载到Redis矢量数据库,Spring Cloud Alibaba AI Starter用于构建一个Spring项目,演示如何在接收到用户查询时检索相关文档并生成回答。代码示例展示了数据加载到Redis以及RAG应用的工作流程,用户可以通过Web API接口进行交互。
52388 62