Redian新闻
>
肝了两小时的 Elasticsearch 保姆级入门

肝了两小时的 Elasticsearch 保姆级入门

公众号新闻

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入芋道快速开发平台知识星球。下面是星球提供的部分资料: 

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号等等功能:

  • Boot 地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • Cloud 地址:https://gitee.com/zhijiantianya/yudao-cloud
  • 视频教程:https://doc.iocoder.cn

来源:勇哥java实战分享


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

进入ES容器,修改 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 之后,刷新页面,进入登录页面:

基于 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"
}

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

新文档可以立即从集群中的任何节点获取。您可以使用 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 查看索引数据。

基于 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.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 创建客户端

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

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);

2、通过 apikey 创建客户端

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

示例代码如下:

// 自己创建的 apikey 
String apiKey = "cnRVUy1Ja0JZYUtuSTRuMG1oRkk6RVFSdTk2T2NRb1cyYVdLRTB4TjktQQ==";

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

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

RestClient restClient = builder.setDefaultHeaders(new Header[]{new BasicHeader("Authorization""ApiKey " + apiKey)}).setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setSSLContext(sslFactory.getSslContext()).setSSLHostnameVerifier(sslFactory.getHostnameVerifier())).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));

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


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,长按”或“扫描”下方二维码噢

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

文章有帮助的话,在看,转发吧。

谢谢支持哟 (*^__^*)

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
加州人最幸福的事,就是家门口有全球最美海岸线 | 一号公路保姆级攻略2024届DSE考试保姆级【报名流程】来啦!有这些考区可选 ...ChatGPT神器Code Interpreter终于开放,到底怎么用?这里有一份保姆级教程必收藏!保姆级美本转学之弯道超车全攻略!附美本TOP40大学转学录取率+申请截止日期!保姆级攻略!2023年如何为父母申请美国绿卡?公安部新闻传媒中心揭牌20200629 《天涯客》定妆照发布售价 4788 元起,大疆这台水桶级入门无人机到底咋样?两小时的过山车Jenkins 真得很牛逼!只是大部分人不会用而已~(保姆级教程)【房产】距离巴黎两小时的绝佳宜居城市,房子便宜生活质量高,你知道吗?联动福利掉落+保姆级攻略,一起上天台!无IGCSE VS IGCSE全A*都能拿到G5 offer,IGCSE还有必要学吗?有了ModelScope-Agent,小白也能打造专属智能体,附保姆级教程我不懂这精神内核和诡异画风2023开学季加拿大留学首次入境保姆级攻略!真的是纯干货!加州最美一号公路, 保姆级攻略来啦!终于开山了!2023富士山保姆级登山攻略,精确到厕所位置秋季入学加拿大,保姆级入境攻略木心与陈丹青那曲久远的音乐科技爱好者周刊#264:Elasticsearch 的启示「GPT-4.5」来了!地表最强Code Interpreter与Midjourney联动,5分做出大片|附保姆级攻略内附保姆级攻略:10月起纽约粮食券申请难度大幅增加,没有这个证明就不行。再见,Elasticsearch !加州最美一号公路 | 保姆级攻略睡4小时的哈佛CEO学长,学习16小时的白富美学霸,我卷不动了……LangChain+通义千问+AnalyticDB向量引擎保姆级教程Chase 入门卡 - Chase Unlimited Freedom 出现了全新的开卡奖励:首年无限6倍吃饭!10倍提升效率,号称取代 Elasticsearch 的轻量级搜索引擎到底有多强悍?跟儿子谈了两小时的情绪管理,原来误会这么多GPT-4.5来了!地表最强Code Interpreter与Midjourney联动,5分做出大片 | 附保姆级攻略Erklärung zur Zusammenarbeit𝐂𝐚𝐥𝐧𝐢𝐊𝐞𝐚𝐧双皮奶内衣裤,软弹有度,上身0束缚~Java导入、导出excel保姆级教程(附封装好的工具类)
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。