经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Elasticsearch » 查看文章
Elasticsearch 保姆级入门篇
来源:cnblogs  作者:勇哥编程游记  时间:2023/8/16 9:14:13  对本文有异议

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

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

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

1 本地安装

1.1 创建网络

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

  1. docker network create elastic

1.2 安装 ES

拉取 Elasticsearch 镜像

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

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

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

启动 docker elasticsearch 镜像

  1. 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 用户密码

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

1.3 安装 Kibana

拉取 Kibana 镜像

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

启动 Kibana 镜像

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

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

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

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

2 接口测试

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

2.1 添加

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

  1. POST /customer/_doc/1
  2. {
  3. "firstname": "Jennifer",
  4. "lastname": "Walters"
  5. }

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

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

  1. GET /customer/_doc/1

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

  1. PUT customer/_bulk
  2. { "create": { } }
  3. { "firstname": "Monica","lastname":"Rambeau"}
  4. { "create": { } }
  5. { "firstname": "Carol","lastname":"Danvers"}
  6. { "create": { } }
  7. { "firstname": "Wanda","lastname":"Maximoff"}
  8. { "create": { } }
  9. { "firstname": "Jennifer","lastname":"Takeda"}

2.2 搜索

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

  1. GET customer/_search
  2. {
  3. "query" : {
  4. "match" : { "firstname": "Jennifer" }
  5. }
  6. }

2.3 视图

进入 Kibana Data Views :

然后创建数据视图 :

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

3 Java SDK 实战

3.1 依赖

  1. <dependency>
  2. <groupId>co.elastic.clients</groupId>
  3. <artifactId>elasticsearch-java</artifactId>
  4. <version>8.9.0</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>io.github.hakky54</groupId>
  8. <artifactId>sslcontext-kickstart</artifactId>
  9. <version>7.1.0</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>com.fasterxml.jackson.core</groupId>
  13. <artifactId>jackson-databind</artifactId>
  14. <version>2.12.3</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>com.fasterxml.jackson.core</groupId>
  18. <artifactId>jackson-core</artifactId>
  19. <version>2.12.3</version>
  20. </dependency>
  21. <dependency>
  22. <groupId>com.fasterxml.jackson.core</groupId>
  23. <artifactId>jackson-annotations</artifactId>
  24. <version>2.12.3</version>
  25. </dependency>
  26. <dependency>
  27. <groupId>jakarta.json</groupId>
  28. <artifactId>jakarta.json-api</artifactId>
  29. <version>2.0.1</version>
  30. </dependency>
  31. <!-- 强制走高版本 ,防止和springboot 依赖冲突 -->
  32. <dependency>
  33. <groupId>org.elasticsearch.client</groupId>
  34. <artifactId>elasticsearch-rest-client</artifactId>
  35. <version>8.9.0</version>
  36. </dependency>

3.2 创建客户端

  1. RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "https"));
  2. final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
  3. credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("elastic", "ilxw@19841201"));
  4. // Elasticsearch 提供了 Https 服务,创建 client 建立 SSL 链接时没有做证书验证 ;
  5. SSLFactory sslFactory = SSLFactory.builder().withUnsafeTrustMaterial().withUnsafeHostnameVerifier().build();
  6. builder = builder.setHttpClientConfigCallback(
  7. httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)
  8. setSSLContext(sslFactory.getSslContext())
  9. .setSSLHostnameVerifier(sslFactory.getHostnameVerifier())
  10. );
  11. RestClient restClient = builder.build();
  12. // Create the transport with a Jackson mapper
  13. ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
  14. // And create the API client
  15. ElasticsearchClient esClient = new ElasticsearchClient(transport);

3.3 创建文档

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

  1. ProductPo product = new ProductPo(1, "Bag", 42);
  2. IndexRequest<Object> indexRequest = new IndexRequest.Builder<>().index("products").id(String.valueOf(product.getId())).document(product).build();
  3. IndexResponse response = esClient.index(indexRequest);
  4. System.out.println("Indexed with version " + response.version());

3.4 查询文档

  1. GetResponse<ProductPo> response = esClient.get(g -> g
  2. .index("products")
  3. .id(String.valueOf(1)),
  4. ProductPo.class
  5. );
  6. if (response.found()) {
  7. ProductPo product = response.source();
  8. System.out.println("Product name " + product.getName());
  9. } else {
  10. System.out.println("Product not found");
  11. }

3.5 修改文档

  1. Map<String, Object> doc = new HashMap<String, Object>();
  2. //文档产品名称调整为 my bike
  3. doc.put("name", "my bike");
  4. doc.put("price", 100);
  5. BulkOperation op = new BulkOperation.Builder().update(
  6. i -> i.action(new UpdateAction.Builder<>().doc(doc).docAsUpsert(true).build()).id("1"))
  7. .build();
  8. List<BulkOperation> list = Collections.singletonList(op);
  9. 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

原文链接:https://www.cnblogs.com/makemylife/p/17632780.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号