首页 > 其他分享 >Elasticsearch 保姆级入门篇

Elasticsearch 保姆级入门篇

时间:2023-08-15 23:55:26浏览次数:43  
标签:文档 elastic Kibana 入门篇 保姆 Elasticsearch new elasticsearch docker

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的新文档,同时存储并建立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 查看索引数据。

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

标签:文档,elastic,Kibana,入门篇,保姆,Elasticsearch,new,elasticsearch,docker
From: https://www.cnblogs.com/makemylife/p/17632780.html

相关文章

  • Linux的ElasticSearch安装部署
    简介全文搜索属于最常见的需求,开源的Elasticsearch(以下简称es)是目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。维基百科、StackOverflow、Github都采用它。Elasticsearch简称es,在企业内同样是一款应用非常广泛的搜索引擎服务。很多服务中的搜索功能,都......
  • ElasticSearch置顶方案
    最近系统有个需求,希望工作流的审批人被催办后就要置顶在最前面,工作流列表我是用es的,一开始想用pinned实现,但用pinned的话,每页都会置顶在前面,我的需求只是想让他优先排在前面,翻页后正常显示后面找到这个,通过把匹配到数据的分数提高,然后用sort进行排序,就能实现我的需求了GETwf......
  • 学好Elasticsearch系列-索引的批量操作
    本文已收录至Github,推荐阅读......
  • 学好Elasticsearch系列-脚本查询
    本文已收录至Github,推荐阅读......
  • 产品帮助中心的制作方法,保姆级0-1完整的实操教程!
    帮助中心是一个产品的重要用户自助服务模块,包括各类产品相关信息,用以帮助用户快速理解和使用产品功能。对于我们产品开发和管理者而言,设计帮助中心的初衷是解决用户困惑,怎么设计帮助中心,才能让其价值尽可能的大,这是我们要深度思考的。 产品帮助中心开发今天就结合HelpLook这款工具......
  • Elasticsearch在项目中的使用
    一.mysql和es的比较1.mysql适合存储海量的数据,但是某些情况下的查询效率过低。正常可以通过添加索引等加快查询速度,但是模糊查询的时候效率很低,会触发全局扫描SELECT * FROM product WHERE title like '%优惠券%' 2.基于Lucene引擎构建的开源分布式搜索分析引擎,可......
  • ElasticSearch批量重建索引
    ElasticSearch批量重建索引ver7.16.2ES的设计目标是针对检索的,对修改的支持不够好,特别是对数据结构的修改,和关系数据库不一样,修改数据结构后,索引的历史数据不会改变,如果需要历史数据也应用修改后的结构和设置,需要重建索引(Reindex).重建索引的一般流程为:基......
  • Heimdall保姆式搭建指南(包括汉化)
    Heimdall保姆式搭建指南(包括汉化)如果你是x86-64安装amd64-latest如果是arm64安装arm64v8-latest如果armhf安装arm32v7-latestdocker下载安装:dockerpulllinuxserver/heimdall:amd64-latestdocker启动:dockerrun-d--name=heimdall--restart=always-p81:80-p44......
  • Elasticsearch 快照管理
    准备共享目录mkdir/data/esbackupchown-Relasticsearch:elasticsearch /data/esbackupmount-tnfs192.168.1.110:/data/esbackup/data/esbackupvielasticsearch.yam添加配置:path.repo:["/data/esbackup"]注意:/home/esbackup这个路径必须确保集群所有节点都可以访问......
  • Elasticsearch之Doc Value与Fielddata
    1、DocValues倒排索引在搜索包含指定term的doc时非常高效,但是在相反的操作时表现很差:查询一个文档中包含哪些term。具体来说,倒排索引在搜索时最为高效,但在排序、聚合等与指定filed相关的操作时效率低下,需要用doc_values。倒排索引将term映射到包含它们的doc,而docvalues将doc......