微服务SpringCloud ES分布式全文搜索引擎简介 下载安装及简单操作入门

简介: 微服务SpringCloud ES分布式全文搜索引擎简介 下载安装及简单操作入门

Elasticsearch

ES简介

Elasticsearch(简称ES)是一个开源的分布式搜索和分析引擎,常用于全文搜索、日志存储和分析等场景。它构建在Apache Lucene搜索引擎库之上,提供了一个分布式的多租户能力,支持大规模的数据处理。

主要特性和用途

  1. 全文搜索: Elasticsearch 是为了高效地进行全文搜索而设计的。它支持快速的文本搜索、复杂的查询、高亮显示匹配文本等功能。这使得它在许多应用中被广泛应用,例如电子商务平台的产品搜索、新闻网站的文章检索等。
  2. 实时数据分析: Elasticsearch 可以处理大规模的实时数据分析任务。通过将结构化和非结构化数据索引到Elasticsearch中,用户可以执行复杂的数据分析、聚合和可视化操作,支持企业的数据分析需求。
  3. 分布式和高可用性: Elasticsearch 是一个分布式系统,数据被分布在多个节点上,每个节点可以处理部分查询和数据操作。它具有内置的容错和高可用机制,通过复制和分片技术实现数据的高可用性和水平扩展。
  4. 实时数据处理: Elasticsearch 支持实时数据写入和检索,因此非常适合需要快速存储和检索数据的应用场景,如实时日志处理和监控系统。
  5. 多种数据类型支持: Elasticsearch 不仅仅支持文本数据的索引和搜索,还可以处理地理空间数据、结构化数据等。它提供了丰富的数据类型和灵活的映射机制,使得能够存储和处理各种类型的数据。
  6. 开放的生态系统: Elasticsearch 生态系统丰富,与许多常见的数据存储、数据处理工具和流行的编程语言集成良好。它还支持插件系统和强大的API,使得可以轻松扩展和定制功能。

应用场景

  • 搜索引擎:用于构建复杂的全文搜索引擎,如电商平台的产品搜索、新闻聚合网站的内容搜索等。
  • 日志和指标分析:通过存储和分析大量的日志数据,支持实时监控和分析系统性能和运行状况。
  • 业务分析:支持企业对大数据的实时查询和分析,帮助做出数据驱动的决策。
  • 安全分析:用于实时分析网络安全事件和入侵检测。
  • 地理信息系统:处理和分析地理空间数据,支持地理位置查询和可视化分析。

总之,Elasticsearch 是一个功能强大的搜索和分析引擎,适用于处理大规模数据的搜索、分析和实时数据处理需求。

分布式全文搜索引擎

我们天天在用ES

搜索的时候

要与多个信息进行匹配查找

然后返回给用户

首先

ES会将数据库中的信息

先进行一个拆分

这个叫做分词

是按照词语关键词拆的

然后就能进行搜索的时候匹配对应的id

每一个关键字对应若干id

每一个id对应数据

然后搜索的时候展示简化版数据

点击简化版数据反映全部信息属于的是全文搜索

在数据库中有索引

在ES中也有索引

但是根据关键字查ID 再由ID查数据

这个在全文搜索里叫倒排索引

倒排索引是怎么出现的呢

是根据创建文档 出现一个一个的库

然后我们进行查找的时候就是在使用这个库,使用文档

ES的下载和安装

下载地址

Download Elasticsearch | Elastic

下载好了

内置

有个jdk17

250MB左右

总大小600MB

双击初始化

文件: elasticsearch.bat

查找端口

访问本地地址

http://localhost:9200/

http://localhost:9200/

即可访问到

成功监测访问成功 部署成功

ES索引操作

ES没有数据库的概念

只有索引

我们可以把ES里的索引理解成数据库

用postman进行测试操作

创建一个名字叫books的索引

数据库

表示本次操作成功

索引不允许重复创建

如果再次创建就会报错

我们可以进行查询

用get进行查询

返回结果

代表查询成功

同样的我们通过不同的请求操作

能完成对索引的不同操作

需要的是路径和请求一一对应

幂等性是指一个操作或函数被多次应用后所产生的效果与一次应用时的效果相同的性质。换句话说,如果对同一个对象或系统进行一次或多次操作,最终的状态或结果都是一致的,那么这个操作就是幂等的。

在Web开发中,HTTP方法如GET、PUT、DELETE等应该是幂等的。例如,无论你调用一次还是多次相同的HTTP PUT请求,资源的状态应该是相同的。

这个地方就是放索引的分词信息的

我们下载一个分词器

看看

我们把他放到es的plugins目录下

相当于是装了一个插件

这时候我们要重新启动我们的ES

如果版本一致并且plugins文件夹下只有ik文件夹 即可启动成功

接下来我们就要去使用了

我们在postman里指定路径 在后面跟上一请求体的信息

在postman里写请求体

{
    "mappings":{
        "properties":{
            "id":{
                "type":"keyword",
                 "analyzer":"ik_max_word"
            },
            "name":{
                "type":"text",
                "analyzer":"ik_max_word"
            },
            "type":{
                "type":"keyword"
            }
        }
    }
}

发送后即创建成功

让索引挂上设定

然后数据进来的时候就会进行操作

小结

实际操作

添加依赖

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.17.0</version> <!-- 替换为您使用的 Elasticsearch 版本 -->
</dependency>
总结

这段代码是一个 Maven 依赖配置,用于在 Java 项目中引入 Elasticsearch 的高级 REST 客户端库。让我们逐行解释每个部分的含义:

  1. <dependency>: 这是 Maven POM 文件中用来声明项目依赖的标签,告诉 Maven 构建工具需要获取和管理哪些库和版本。
  2. <groupId>: 指定了依赖库的组织或者项目组的唯一标识符。在这里,org.elasticsearch.client 表示 Elasticsearch 官方客户端的组织。
  3. <artifactId>: 指定了具体的库或者项目的名称。在这里,elasticsearch-rest-high-level-client 是 Elasticsearch 的高级 REST 客户端库,它提供了更高级别的 API 接口来与 Elasticsearch 集群进行交互。
  4. <version>: 指定了要使用的库的版本号。在这里,7.17.0 是 Elasticsearch 高级 REST 客户端库的版本号。根据您实际使用的 Elasticsearch 版本,可以将这个版本号替换为适合的版本。

通过这些配置,您的 Maven 项目就能够使用 Elasticsearch 高级 REST 客户端库,从而方便地与 Elasticsearch 进行索引、搜索和管理数据的操作。

连接到 Elasticsearch

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
 
public class ElasticsearchExample {
 
    public static void main(String[] args) {
        // 连接本地 Elasticsearch 服务,默认端口为9200
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost", 9200, "http")));
 
        // 在这里进行索引文档和查询的操作
    }
}

这段代码是一个简单的 Java 示例,演示了如何使用 Elasticsearch 的高级 REST 客户端连接到本地的 Elasticsearch 服务,并进行基本的索引文档和查询操作。让我们逐行解释代码的各个部分:

  1. import org.apache.http.HttpHost;
  • 这是导入了 Apache 的 HttpHost 类,用于指定 Elasticsearch 服务的主机名、端口和协议。
  1. import org.elasticsearch.client.RestClient;
  • 这是导入了 Elasticsearch 的低级 REST 客户端类 RestClient,用于构建连接 Elasticsearch 的客户端。
  1. import org.elasticsearch.client.RestHighLevelClient;
  • 这是导入了 Elasticsearch 的高级 REST 客户端类 RestHighLevelClient,它提供了更加友好和面向对象的 API 接口,方便进行索引、搜索和管理操作。
  1. public class ElasticsearchExample {
  • 定义了一个名为 ElasticsearchExample 的公共类。
  1. public static void main(String[] args) {
  • 这是 Java 程序的入口点,main 方法是程序执行的起点。
  1. RestHighLevelClient client = new RestHighLevelClient(
  • 创建了一个 RestHighLevelClient 对象 client,用于与 Elasticsearch 服务进行交互。
  1. RestClient.builder(new HttpHost("localhost", 9200, "http")));
  • 使用 RestClient.builder 方法构建了一个 RestClient 实例,参数 new HttpHost("localhost", 9200, "http") 指定了 Elasticsearch 服务的主机名为 localhost,端口为 9200,协议为 http
  1. // 在这里进行索引文档和查询的操作
  • 这是一个注释,表明在这个代码块内可以添加实际的索引文档和查询操作代码。
总结

这段代码的主要作用是建立了与本地 Elasticsearch 服务的连接,并创建了一个高级 REST 客户端 RestHighLevelClient 对象 client。通过这个客户端对象,您可以使用 Elasticsearch 的高级 API 进行索引、搜索和管理数据的操作。

索引文档

import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.common.xcontent.XContentType;
 
public class ElasticsearchExample {
 
    public static void main(String[] args) {
        // 索引文档示例
        String jsonString = "{" +
                "\"title\":\"Elasticsearch Basics\"," +
                "\"content\":\"Elasticsearch is a distributed search and analytics engine.\"" +
                "}";
 
        IndexRequest request = new IndexRequest("my_index")
                .id("1")
                .source(jsonString, XContentType.JSON);
 
        try {
            IndexResponse indexResponse = client.index(request);
            System.out.println("文档索引成功,文档 ID: " + indexResponse.getId());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
总结

当然!这段示例代码演示了如何使用 Elasticsearch 的高级 REST 客户端来索引一个文档到指定的索引中。

  1. 准备索引文档的数据: 在示例中,我们定义了一个 JSON 字符串来表示要索引的文档内容。这个文档包括两个字段:titlecontenttitle 字段包含了文档的标题,而 content 字段描述了 Elasticsearch 是一个分布式搜索和分析引擎。
  2. 创建 IndexRequest 对象: 使用 Elasticsearch 的 Java 客户端,我们创建了一个 IndexRequest 对象。这个对象指定了要将文档索引到的目标索引名称(在示例中是 "my_index")和文档的唯一标识符(ID)。此外,我们使用 source 方法将之前准备的 JSON 字符串和指定的内容类型(XContentType.JSON)添加到请求中。
  3. 执行索引操作: 调用 Elasticsearch 客户端的 index 方法并传递 IndexRequest 对象。这个操作将会把文档发送给 Elasticsearch 集群进行索引。如果索引操作成功,将返回一个 IndexResponse 对象,其中包含了有关索引操作结果的信息,比如索引的文档 ID。
  4. 处理索引响应: 在示例中,我们捕获可能抛出的 IOException 异常,这可能由于网络问题或 Elasticsearch 服务不可用等原因造成。如果索引操作成功,我们通过 IndexResponse 对象获取文档的 ID,并将其打印输出。

这个示例展示了如何利用 Elasticsearch 的 Java 客户端,通过简单的 API 调用,将结构化数据索引到 Elasticsearch 中。这种方式非常适合构建应用程序,将搜索和分析功能集成到应用中,并利用 Elasticsearch 的强大搜索引擎能力来快速检索和分析数据。

查询文档

import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
 
import java.io.IOException;
 
public class ElasticsearchExample {
 
    public static void main(String[] args) {
        // 查询文档示例
        SearchRequest searchRequest = new SearchRequest("my_index");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(QueryBuilders.matchQuery("title", "Elasticsearch"));
        searchRequest.source(searchSourceBuilder);
 
        try {
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
            System.out.println("搜索到 " + searchResponse.getHits().getTotalHits().value + " 个文档:");
            searchResponse.getHits().forEach(hit -> {
                System.out.println("文档 ID: " + hit.getId() + ", 标题: " + hit.getSourceAsMap().get("title"));
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
总结

这段代码演示了如何使用 Elasticsearch 的 Java 客户端来执行搜索请求并处理搜索结果。以下是关键步骤的解释:

  1. 创建 SearchRequest 对象: 首先,通过 SearchRequest 类创建了一个搜索请求对象 searchRequest,指定了要搜索的索引名称为 "my_index"
  2. 构建查询条件: 使用 SearchSourceBuilder 对象 searchSourceBuilder 构建查询条件。在这个例子中,使用 QueryBuilders.matchQuery("title", "Elasticsearch") 创建了一个匹配查询,用于搜索包含指定标题("Elasticsearch")的文档。
  3. 配置搜索请求: 将构建好的查询条件设置到搜索请求对象中,通过 searchRequest.source(searchSourceBuilder) 方法实现。
  4. 执行搜索请求: 使用 Elasticsearch 客户端执行搜索请求,并通过 client.search(searchRequest, RequestOptions.DEFAULT) 方法发送请求。这里假设 client 是已经初始化好的 Elasticsearch 客户端对象。
  5. 处理搜索响应:try-catch块中,捕获可能抛出的IOException异常,这是因为执行 Elasticsearch 操作时可能会涉及到网络通信。如果搜索操作成功,会得到一个SearchResponse对象searchResponse
  • 使用 searchResponse.getHits().getTotalHits().value 获取搜索到的文档总数,并打印出来。
  • 使用 searchResponse.getHits().forEach(...) 迭代处理每个搜索到的文档结果。
  • hit.getId() 获取文档的 ID。
  • hit.getSourceAsMap().get("title") 获取文档的标题字段。
  1. 异常处理:catch 块中,打印出任何发生的 IOException 异常信息。

这段代码展示了如何利用 Elasticsearch 的 Java 客户端进行简单的文档搜索操作,并处理搜索结果。通过这种方式,可以轻松地集成 Elasticsearch 的搜索功能到 Java 应用程序中,实现快速、灵活的文档检索。

关闭客户端连接

import java.io.IOException;
 
public class ElasticsearchExample {
 
    public static void main(String[] args) {
        // 关闭客户端连接
        try {
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
总结

这段代码展示了如何关闭 Elasticsearch 客户端连接。以下是关键点的解释:这行代码导入了 IOException 类,用于处理在关闭客户端连接时可能抛出的异常。

  1. 关闭客户端连接:main 方法中,通过调用 client.close() 方法来关闭 Elasticsearch 客户端连接。这里假设 client 是一个已经初始化和配置好的 Elasticsearch 客户端对象。
  2. 异常处理: 使用 try-catch 块来捕获可能抛出的 IOException 异常。在 catch 块中,通过 e.printStackTrace() 打印异常堆栈信息,以便查看问题所在。
  3. 作用: 关闭 Elasticsearch 客户端连接是一个良好的实践,特别是在应用程序即将退出时或者不再需要连接 Elasticsearch 服务时。关闭连接可以释放资源并确保不会出现连接泄漏或资源浪费。
  4. 注意事项:
  • 确保 client 对象在调用 close() 方法之前已经正确初始化和配置。
  • 处理 IOException 是为了在关闭连接时处理可能出现的网络或IO异常,确保程序能够在异常情况下正常退出或给予适当的反馈。

总结来说,这段代码展示了如何安全地关闭 Elasticsearch 客户端连接,并提供了基本的异常处理以应对可能出现的异常情况。

总结

这些示例展示了如何使用 Java 客户端连接到 Elasticsearch、索引文档以及执行简单的查询操作。您可以根据实际需求和场景进一步扩展这些操作,例如添加更复杂的查询、处理搜索结果等。请确保根据您的具体情况调整代码,包括替换索引名称、文档内容和查询条件。

个人号推广

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
目录
相关文章
|
9月前
|
存储 算法 安全
“卧槽,系统又崩了!”——别慌,这也许是你看过最通俗易懂的分布式入门
本文深入解析分布式系统核心机制:数据分片与冗余副本实现扩展与高可用,租约、多数派及Gossip协议保障一致性与容错。探讨节点故障、网络延迟等挑战,揭示CFT/BFT容错原理,剖析规模与性能关系,为构建可靠分布式系统提供理论支撑。
433 2
|
Java API 微服务
Java 21 与 Spring Boot 3.2 微服务开发从入门到精通实操指南
《Java 21与Spring Boot 3.2微服务开发实践》摘要: 本文基于Java 21和Spring Boot 3.2最新特性,通过完整代码示例展示了微服务开发全流程。主要内容包括:1) 使用Spring Initializr初始化项目,集成Web、JPA、H2等组件;2) 配置虚拟线程支持高并发;3) 采用记录类优化DTO设计;4) 实现JPA Repository与Stream API数据访问;5) 服务层整合虚拟线程异步处理和结构化并发;6) 构建RESTful API并使用Springdoc生成文档。文中特别演示了虚拟线程配置(@Async)和StructuredTaskSco
1245 0
|
Linux 网络安全 Docker
尼恩一键开发环境: vagrant+java+springcloud+redis+zookeeper镜像下载(&制作详解)
尼恩提供了一系列文章,旨在帮助开发者轻松搭建一键开发环境,涵盖Java分布式、高并发场景下的多种技术组件安装与配置。内容包括但不限于Windows和CentOS虚拟机的安装与排坑指南、MySQL、Kafka、Redis、Zookeeper等关键组件在Linux环境下的部署教程,并附带详细的视频指导。此外,还特别介绍了Vagrant这一虚拟环境部署工具,
尼恩一键开发环境: vagrant+java+springcloud+redis+zookeeper镜像下载(&制作详解)
|
SpringCloudAlibaba Dubbo Java
【SpringCloud Alibaba系列】Dubbo基础入门篇
Dubbo是一款高性能、轻量级的开源Java RPC框架,提供面向接口代理的高性能RPC调用、智能负载均衡、服务自动注册和发现、运行期流量调度、可视化服务治理和运维等功能。
【SpringCloud Alibaba系列】Dubbo基础入门篇
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
4357 8
|
Kubernetes Cloud Native 开发者
云原生入门:从容器到微服务
本文将带你走进云原生的世界,从容器技术开始,逐步深入到微服务架构。我们将通过实际代码示例,展示如何利用云原生技术构建和部署应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和启示。
|
Cloud Native 持续交付 云计算
云原生入门指南:从容器到微服务
【10月更文挑战第28天】在数字化转型的浪潮中,云原生技术成为推动现代软件开发的关键力量。本篇文章将带你了解云原生的基本概念,探索它如何通过容器化、微服务架构以及持续集成和持续部署(CI/CD)的实践来提升应用的可伸缩性、灵活性和可靠性。你将学习到如何利用这些技术构建和部署在云端高效运行的应用,并理解它们对DevOps文化的贡献。
297 2
|
Kubernetes 关系型数据库 MySQL
Kubernetes入门:搭建高可用微服务架构
【10月更文挑战第25天】在快速发展的云计算时代,微服务架构因其灵活性和可扩展性备受青睐。本文通过一个案例分析,展示了如何使用Kubernetes将传统Java Web应用迁移到Kubernetes平台并改造成微服务架构。通过定义Kubernetes服务、创建MySQL的Deployment/RC、改造Web应用以及部署Web应用,最终实现了高可用的微服务架构。Kubernetes不仅提供了服务发现和负载均衡的能力,还通过各种资源管理工具,提升了系统的可扩展性和容错性。
702 3
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
消息中间件 关系型数据库 Java
‘分布式事务‘ 圣经:从入门到精通,架构师尼恩最新、最全详解 (50+图文4万字全面总结 )
本文 是 基于尼恩之前写的一篇 分布式事务的文章 升级而来 , 尼恩之前写的 分布式事务的文章, 在全网阅读量 100万次以上 , 被很多培训机构 作为 顶级教程。 此文修改了 老版本的 一个大bug , 大家不要再看老版本啦。

热门文章

最新文章