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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 本文作为从零搭建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体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
4天前
|
Java API 微服务
【Spring Boot系列】通过OpenAPI规范构建微服务服务接口
【4月更文挑战第5天】通过OpenAPI接口构建Spring Boot服务RestAPI接口
23 0
|
1月前
|
NoSQL Java Redis
小白版的springboot中集成mqtt服务(超级无敌详细),实现不了掐我头!!!
小白版的springboot中集成mqtt服务(超级无敌详细),实现不了掐我头!!!
244 1
|
1月前
|
SpringCloudAlibaba Dubbo Java
SpringCloud Alibaba集成Dubbo实现远程服务间调用
SpringCloud Alibaba集成Dubbo实现远程服务间调用
|
1月前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
91 0
|
11天前
|
监控 Sentinel 微服务
微服务的防御之道:服务雪崩、服务熔断、服务降级
微服务的防御之道:服务雪崩、服务熔断、服务降级
20 1
|
22天前
|
SQL 数据库 Windows
SpringCloud集成seata分布式事务控制
SpringCloud集成seata分布式事务控制
15 0
|
25天前
|
Java fastjson 数据安全/隐私保护
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
38 0
|
1月前
|
消息中间件 SpringCloudAlibaba Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
782 0
|
1月前
|
SpringCloudAlibaba 负载均衡 Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(三)Eureka服务注册中心
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(三)Eureka服务注册中心
44 1
|
15天前
|
消息中间件 Java Kafka
Springboot集成高低版本kafka
Springboot集成高低版本kafka