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

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

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

1 本地安装

1.1 创建网络

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

docker network create elastic

1.2 安装 ES

拉取 Elasticsearch 镜像

docker pull docker.elastic.co/elasticsearch/elasticsearch:{version}

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

docker pull docker.elastic.co/elasticsearch/elasticsearch:8.9.0

启动 docker elasticsearch 镜像

docker run --name elasticsearch --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -t docker.elastic.co/elasticsearch/elasticsearch:8.9.0

修改 elasticsearch 用户密码

bin/elasticsearch-reset-password --username elastic -i

1.3 安装 Kibana

拉取 Kibana 镜像

docker pull docker.elastic.co/kibana/kibana:8.9.0

启动 Kibana 镜像

docker run --name kibana --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.9.0

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

bin/elasticsearch-create-enrollment-token -s kibana

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

2 接口测试

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

2.1 添加

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

POST /customer/_doc/1
{
"firstname": "Jennifer",
"lastname": "Walters"
}

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

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

GET /customer/_doc/1

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

PUT customer/_bulk
{ "create": { } }
{ "firstname": "Monica","lastname":"Rambeau"}
{ "create": { } }
{ "firstname": "Carol","lastname":"Danvers"}
{ "create": { } }
{ "firstname": "Wanda","lastname":"Maximoff"}
{ "create": { } }
{ "firstname": "Jennifer","lastname":"Takeda"}

2.2 搜索

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

GET customer/_search
{
"query" : {
"match" : { "firstname": "Jennifer" }
}
}

2.3 视图

进入 Kibana Data Views :

然后创建数据视图 :

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

3 Java SDK 实战

3.1 依赖

<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>8.9.0</version>
</dependency> <dependency>
<groupId>io.github.hakky54</groupId>
<artifactId>sslcontext-kickstart</artifactId>
<version>7.1.0</version>
</dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.3</version>
</dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.12.3</version>
</dependency> <dependency>
<groupId>jakarta.json</groupId>
<artifactId>jakarta.json-api</artifactId>
<version>2.0.1</version>
</dependency> <!-- 强制走高版本 ,防止和springboot 依赖冲突 -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>8.9.0</version>
</dependency>

3.2 创建客户端

RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "https"));

final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("elastic", "ilxw@19841201")); // Elasticsearch 提供了 Https 服务,创建 client 建立 SSL 链接时没有做证书验证 ;
SSLFactory sslFactory = SSLFactory.builder().withUnsafeTrustMaterial().withUnsafeHostnameVerifier().build();
builder = builder.setHttpClientConfigCallback(
httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)
setSSLContext(sslFactory.getSslContext())
.setSSLHostnameVerifier(sslFactory.getHostnameVerifier())
); RestClient restClient = builder.build(); // Create the transport with a Jackson mapper
ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper()); // And create the API client
ElasticsearchClient esClient = new ElasticsearchClient(transport);

3.3 创建文档

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

ProductPo product = new ProductPo(1, "Bag", 42);

IndexRequest<Object> indexRequest = new IndexRequest.Builder<>().index("products").id(String.valueOf(product.getId())).document(product).build();

IndexResponse response = esClient.index(indexRequest);

System.out.println("Indexed with version " + response.version());

3.4 查询文档

GetResponse<ProductPo> response = esClient.get(g -> g
.index("products")
.id(String.valueOf(1)),
ProductPo.class
); if (response.found()) {
ProductPo product = response.source();
System.out.println("Product name " + product.getName());
} else {
System.out.println("Product not found");
}

3.5 修改文档

 Map<String, Object> doc = new HashMap<String, Object>();
//文档产品名称调整为 my bike
doc.put("name", "my bike");
doc.put("price", 100); BulkOperation op = new BulkOperation.Builder().update(
i -> i.action(new UpdateAction.Builder<>().doc(doc).docAsUpsert(true).build()).id("1"))
.build(); List<BulkOperation> list = Collections.singletonList(op);
BulkResponse response = esClient.bulk(bulkBuilder -> bulkBuilder.index("products").operations(list));

参考文档:

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

Elasticsearch 保姆级入门篇的更多相关文章

  1. 最新版本elasticsearch本地搭建入门篇

    最新版本elasticsearch本地搭建入门篇 项目介绍 最近工作用到elasticsearch,主要是用于网站搜索,和应用搜索. 工欲善其事,必先利其器. 自己开始关注elasticsearch, ...

  2. Elasticsearch学习记录(入门篇)

    Elasticsearch学习记录(入门篇) 1. Elasticsearch的请求与结果 请求结构 curl -X<VERB> '<PROTOCOL>://<HOST& ...

  3. API网关才是大势所趋?SpringCloud Gateway保姆级入门教程

    什么是微服务网关 SpringCloud Gateway是Spring全家桶中一个比较新的项目,Spring社区是这么介绍它的: 该项目借助Spring WebFlux的能力,打造了一个API网关.旨 ...

  4. ElasticSearch学习,入门篇(一)

    概念解析 1.什么是搜索 搜索就是在任何场景下,找寻你想要的信息,这个时候你会输入一段要搜索的关键字,然后期望找到这个关键字相关的有效信息. 2.如果用数据库做搜素会怎么样 select * from ...

  5. 【开发工具】Postman保姆级入门教程

    目录 一.简单使用 1. 创建命名空间 2. 创建新集合 3. 按模块整理接口 二.使用环境变量 1. 创建环境与环境变量 2. 使用环境变量 3. 登录后自动更新环境变量 转载请注明出处 一.简单使 ...

  6. Containerd 的前世今生和保姆级入门教程

    原文链接:https://fuckcloudnative.io/posts/getting-started-with-containerd/ 1. Containerd 的前世今生 很久以前,Dock ...

  7. 管理订单状态,该上状态机吗?轻量级状态机COLA StateMachine保姆级入门教程

    前言 在平常的后端项目开发中,状态机模式的使用其实没有大家想象中那么常见,笔者之前由于不在电商领域工作,很少在业务代码中用状态机来管理各种状态,一般都是手动get/set状态值.去年笔者进入了电商领域 ...

  8. 转载:elasticsearch入门篇

    转自:https://www.cnblogs.com/hello-shf/p/11543408.html elasticsearch入门篇   elasticsearch专栏:https://www. ...

  9. RocketMQ保姆级教程

    大家好,我是三友~~ 上周花了一点时间从头到尾.从无到有地搭建了一套RocketMQ的环境,觉得还挺easy的,所以就写篇文章分享给大家. 整篇文章可以大致分为三个部分,第一部分属于一些核心概念和工作 ...

  10. 开心菜鸟系列----变量的解读(javascript入门篇)

                       console.info(         console.info(window['weiwu'])          console.info(window. ...

随机推荐

  1. 2020-10-09:假如我能拿到别人的URL,然后篡改数据(金额)发送给系统,如何避免这种事情的发生?

    福哥答案2020-10-09:#福大大架构师每日一题# [此答案来自知乎:](https://www.zhihu.com/question/424764253) 这种敏感url一般都有安全机制的:1. ...

  2. 谷歌语法Github及利用方式

    0x01简介 GoogleHack(谷歌语法)是指使用Google等搜索引擎对某些特定的网络主机漏洞(通常是服务器上的脚本漏洞)进行搜索,以达到快速找到漏洞主机或特定主机的漏洞的目的.比如使用搜索包含 ...

  3. OCR -- 文本识别 -- 理论篇

    文本识别的应用场景很多,有文档识别.路标识别.车牌识别.工业编号识别等等,根据实际场景可以把文本识别任务分为两个大类:规则文本识别和不规则文本识别. 规则文本识别:主要指印刷字体.扫描文本等,认为文本 ...

  4. Asp-Net-Core开发笔记:API版本管理

    前言 对于Web API应用程序而言,随着时间的推移以及需求的增加或改变,API必然会遇到升级的需求.事实上,Web API应用程序应该从创建时就考虑到API版本的问题.业务的调整.功能的增加.接口的 ...

  5. 前端仿京东、天猫带搜索历史搜索栏搜索框searchBar

    快速实现前端仿京东.天猫带搜索历史搜索栏搜索框searchBar, 使用简单便利, 请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12529 ...

  6. OAuth2.0andmultifactorauthentication:Howtocreateasecure

    目录 1. 引言 2. 技术原理及概念 2.1. 基本概念解释 2.2. 技术原理介绍 2.3. 相关技术比较 3. 实现步骤与流程 3.1. 准备工作:环境配置与依赖安装 随着数字化时代的到来,人们 ...

  7. 基于OLAP技术的企业级大数据分析平台的国际化发展与合作

    目录 标题:<基于OLAP技术的企业级大数据分析平台的国际化发展与合作> 背景介绍 随着全球化的不断推进,企业对大数据分析的需求日益增长.企业通过数据分析来发现隐藏在业务数据中的机会,从而 ...

  8. 让AI支持游戏更自然、更直观:基于情感分析的AI游戏体验和交互设计

    目录 引言 随着游戏市场的不断发展,人工智能技术的应用也越来越广泛.其中,情感分析技术在游戏中的应用,可以让游戏更加自然.直观,同时提高游戏的用户体验.本文将介绍如何让 AI 支持游戏更自然.更直观: ...

  9. celery笔记六之worker介绍

    本文首发于公众号:Hunter后端 原文链接:celery笔记六之worker介绍 前面我们介绍过 celery 的理想的设计方式是几个 worker 处理特定的任务队列的数据,这样可以避免任务在队列 ...

  10. Java String、StringBuilder、StringBuffer类

    1.String类 创建字符串对象后,字符串对象不可以发生改变,并且这个字符串对象存储在方法区中的字符串常量池中. 即使想改变字符串对象,那么也只是在字符串常量池中重新创建了一个字符串对象而已. 2. ...