0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Elasticsearch保姆级入门

jf_ro2CN3Fa 来源:勇哥java实战分享 2023-09-01 15:24 次阅读

Elasticsearch 是一个分布式的、面向生产规模工作负载优化的搜索引擎。

Kibana 可以将 Elasticsearch 中的数据转化为直观的图表、图形和仪表盘。

这篇文章,您将学习本地安装 Elasticsearch 和 Kibana,以及使用开发工具/ Java SDK 创建索引和搜索数据。

1 本地安装

1.1 创建网络

我们需要创建一个供 Elasticsearch 和 Kibana 使用的 network。这个 network 将被用于 Elasticsearch 和 Kibana 之间的通信

dockernetworkcreateelastic

1.2 安装 ES

拉取 Elasticsearch 镜像

dockerpulldocker.elastic.co/elasticsearch/elasticsearch:{version}

这里的版本 version ,我们选取:8.9.0

dockerpulldocker.elastic.co/elasticsearch/elasticsearch:8.9.0

启动 docker elasticsearch 镜像

dockerrun--nameelasticsearch--netelastic-p9200:9200-p9300:9300-e"discovery.type=single-node"-tdocker.elastic.co/elasticsearch/elasticsearch:8.9.0

进入ES容器,修改 elasticsearch 用户密码

bin/elasticsearch-reset-password--usernameelastic-i

1.3 安装 Kibana

拉取 Kibana 镜像

dockerpulldocker.elastic.co/kibana/kibana:8.9.0

启动 Kibana 镜像

dockerrun--namekibana--netelastic-p5601:5601docker.elastic.co/kibana/kibana:8.9.0

因为启动安装 Kibana ,需要 token , 所以进入 elasticsearch 容器 ,执行:

bin/elasticsearch-create-enrollment-token-skibana
372f5f18-47c2-11ee-97a6-92fbcf53809c.png

输入 token 之后,刷新页面,进入登录页面:

37432e62-47c2-11ee-97a6-92fbcf53809c.png

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

2 接口测试

我们可以使用 Kibana Dev tools 来进行接口测试。

2.1 添加

向索引添加单个文档,提交一个 HTTP POST 请求,目标是该索引。

POST/customer/_doc/1
{
"firstname":"Jennifer",
"lastname":"Walters"
}
37547c4e-47c2-11ee-97a6-92fbcf53809c.png

该请求会自动创建名为customer的索引(如果不存在),然后添加一个 ID 为 1的新文档,同时存储并建立firstnamelastname字段的索引。

新文档可以立即从集群中的任何节点获取。您可以使用 GET 请求来检索它,请求中需指定其文档 ID :

GET/customer/_doc/1
3766fc0c-47c2-11ee-97a6-92fbcf53809c.png

要一次性添加多个文档,请使用 _bulk API。批量数据必须是以换行分隔的 JSON(NDJSON)格式。每一行必须以换行字符( )结尾,包括最后一行。

PUTcustomer/_bulk
{"create":{}}
{"firstname":"Monica","lastname":"Rambeau"}
{"create":{}}
{"firstname":"Carol","lastname":"Danvers"}
{"create":{}}
{"firstname":"Wanda","lastname":"Maximoff"}
{"create":{}}
{"firstname":"Jennifer","lastname":"Takeda"}
37820f92-47c2-11ee-97a6-92fbcf53809c.png

2.2 搜索

已索引的文档可以在准实时的情况下进行搜索。下面的搜索将在customer索引中匹配所有名为 Jennifer 的顾客。

GETcustomer/_search
{
"query":{
"match":{"firstname":"Jennifer"}
}
}
37ba8aac-47c2-11ee-97a6-92fbcf53809c.png

2.3 视图

进入 Kibana Data Views :

37d9741c-47c2-11ee-97a6-92fbcf53809c.png

然后创建数据视图 :

37e989a6-47c2-11ee-97a6-92fbcf53809c.png

创建数据视图之后,可以在 Analytics > Discover 查看索引数据。

37fc857e-47c2-11ee-97a6-92fbcf53809c.png

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

3 Java SDK 实战

3.1 依赖

<dependency>
<groupId>co.elastic.clientsgroupId>
<artifactId>elasticsearch-javaartifactId>
<version>8.9.0version>
dependency>

<dependency>
<groupId>io.github.hakky54groupId>
<artifactId>sslcontext-kickstartartifactId>
<version>7.1.0version>
dependency>

<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.12.3version>
dependency>

<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-coreartifactId>
<version>2.12.3version>
dependency>

<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-annotationsartifactId>
<version>2.12.3version>
dependency>

<dependency>
<groupId>jakarta.jsongroupId>
<artifactId>jakarta.json-apiartifactId>
<version>2.0.1version>
dependency>


<dependency>
<groupId>org.elasticsearch.clientgroupId>
<artifactId>elasticsearch-rest-clientartifactId>
<version>8.9.0version>
dependency>

3.2 创建客户端

1、通过用户名和密码创建客户端

RestClientBuilderbuilder=RestClient.builder(newHttpHost("localhost",9200,"https"));

finalCredentialsProvidercredentialsProvider=newBasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,newUsernamePasswordCredentials("elastic","ilxw@19841201"));

// Elasticsearch 提供了 Https 服务,创建 client 建立 SSL 链接时没有做证书验证;
SSLFactorysslFactory=SSLFactory.builder().withUnsafeTrustMaterial().withUnsafeHostnameVerifier().build();
builder=builder.setHttpClientConfigCallback(
httpClientBuilder->httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)
setSSLContext(sslFactory.getSslContext())
.setSSLHostnameVerifier(sslFactory.getHostnameVerifier())
);

RestClientrestClient=builder.build();

//CreatethetransportwithaJacksonmapper
ElasticsearchTransporttransport=newRestClientTransport(restClient,newJacksonJsonpMapper());

//AndcreatetheAPIclient
ElasticsearchClientesClient=newElasticsearchClient(transport);

2、通过 apikey 创建客户端

我们在安全目录的管理页面,创建 API key ,如下图:

381cbc36-47c2-11ee-97a6-92fbcf53809c.png

示例代码如下:

//自己创建的apikey
StringapiKey="cnRVUy1Ja0JZYUtuSTRuMG1oRkk6RVFSdTk2T2NRb1cyYVdLRTB4TjktQQ==";

RestClientBuilderbuilder=RestClient.builder(newHttpHost("localhost",9200,"https"));

SSLFactorysslFactory=SSLFactory.builder().withUnsafeTrustMaterial().withUnsafeHostnameVerifier().build();

RestClientrestClient=builder.setDefaultHeaders(newHeader[]{newBasicHeader("Authorization","ApiKey"+apiKey)}).setHttpClientConfigCallback(httpClientBuilder->httpClientBuilder.setSSLContext(sslFactory.getSslContext()).setSSLHostnameVerifier(sslFactory.getHostnameVerifier())).build();

//CreatethetransportwithaJacksonmapper
ElasticsearchTransporttransport=newRestClientTransport(restClient,newJacksonJsonpMapper());

//AndcreatetheAPIclient
ElasticsearchClientesClient=newElasticsearchClient(transport);

3.3 创建文档

创建索引名为 products ,新建一个文档 id 为 1 。

ProductPoproduct=newProductPo(1,"Bag",42);

IndexRequestindexRequest=newIndexRequest.Builder<>().index("products").id(String.valueOf(product.getId())).document(product).build();

IndexResponseresponse=esClient.index(indexRequest);

System.out.println("Indexedwithversion"+response.version());

			38378fe8-47c2-11ee-97a6-92fbcf53809c.png

3.4 查询文档

GetResponseresponse=esClient.get(g->g
.index("products")
.id(String.valueOf(1)),
ProductPo.class
);

if(response.found()){
ProductPoproduct=response.source();
System.out.println("Productname"+product.getName());
}else{
System.out.println("Productnotfound");
}

3.5 修改文档

Mapdoc=newHashMap();
//文档产品名称调整为mybike
doc.put("name","mybike");
doc.put("price",100);

BulkOperationop=newBulkOperation.Builder().update(
i->i.action(newUpdateAction.Builder<>().doc(doc).docAsUpsert(true).build()).id("1"))
.build();

Listlist=Collections.singletonList(op);
BulkResponseresponse=esClient.bulk(bulkBuilder->bulkBuilder.index("products").operations(list));

3.6 删除文档

esClient.delete(d->d.index("products").id("1"));

参考文档:

1、Elasticsearch 官方文档:

https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/getting-started-java.html

2、Github文档

https://github.com/elastic/elasticsearch


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2904

    浏览量

    102994
  • 镜像
    +关注

    关注

    0

    文章

    153

    浏览量

    10587
  • Elasticsearch
    +关注

    关注

    0

    文章

    25

    浏览量

    2788

原文标题:肝了两小时的 Elasticsearch 保姆级入门

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Windows安装ElasticSearch

    Windows安装ElasticSearch
    的头像 发表于 02-15 17:09 697次阅读
    Windows安装<b class='flag-5'>ElasticSearch</b>

    linux安装配置ElasticSearch之源码安装

    ElasticSearch是基于Lucene这个非常成熟的索引方案,另加上一些分布式的实现:集群,sharding,replication等。以下是对其采用源码安装的方法1.下载
    发表于 01-11 17:27

    ElasticSearch引擎的文档更新

    ElasticSearch查询 第二篇:文档更新
    发表于 04-24 07:55

    ElasticSearch的词条查询

    ElasticSearch查询 第三篇:词条查询
    发表于 04-30 17:03

    ElasticSearch查询的匹配查询

    ElasticSearch查询 第四篇:匹配查询(Match)
    发表于 05-15 09:59

    docker安装Elasticsearch操作指南

    docker安装Elasticsearch以及分词器
    发表于 09-16 16:53

    ElasticSearch的初步环境

    ElasticSearch最实用入门指南——初步环境
    发表于 03-31 11:32

    STM32HAL库硬件I2C如何驱动INA226保姆

    STM32HAL库硬件I2C如何驱动INA226保姆
    发表于 02-07 06:35

    elasticsearch介绍PPT

    elasticsearch介绍PPT
    发表于 12-13 21:05 20次下载

    ElasticSearch的必备知识:从入门、索引管理到映射详解

    本文介绍了ElasticSearch的必备知识:从入门、索引管理到映射详解。 一、快速入门 1.查看集群的健康状况 http://localhost:9200/_cat http
    的头像 发表于 09-25 10:44 2094次阅读
    <b class='flag-5'>ElasticSearch</b>的必备知识:从<b class='flag-5'>入门</b>、索引管理到映射详解

    教你们怎么在Django中使用ElasticSearch

    什么是ElasticsearchElasticsearch是基于Lucene库的搜索引擎。它提供了具有HTTP Web界面和无模式JSON文档的分布式,多租户功能的全文本搜索引擎
    的头像 发表于 06-11 16:01 1715次阅读

    Elasticsearch6.1教程

    Elasticsearch6.1教程
    发表于 07-04 14:40 0次下载

    ElasticSearch是什么?应用场景是什么?

    ElasticSearch是什么 ElasticSearch的功能 ElasticSearch的应用场景 ElasticSearch的特点
    的头像 发表于 10-09 18:38 1939次阅读

    Elasticsearch入门简介

    Elasticsearch(后续简称ES) 是一个实时的分布式存储、搜索、分析的引擎。
    的头像 发表于 02-24 09:44 396次阅读

    SpringBoot 连接ElasticSearch的使用方式

    在上篇 ElasticSearch 文章中,我们详细的介绍了 ElasticSearch 的各种 api 使用。 实际的项目开发过程中,我们通常基于某些主流框架平台进行技术开发,比如
    的头像 发表于 10-09 10:35 426次阅读