0基础学习Elasticsearch-Quick start

文章目录

  • [1 背景](#1 背景)
  • [2 前言](#2 前言)
  • [3 快速部署ES](#3 快速部署ES)
  • [4 快速部署Kibana](#4 快速部署Kibana)
  • [5 发送请求给ES](#5 发送请求给ES)
    • [5.1 打开Kibana控制台](#5.1 打开Kibana控制台)
    • [5.2 通过REST API发送请求](#5.2 通过REST API发送请求)
    • [5.3 通过curl发送请求](#5.3 通过curl发送请求)
    • [5.4 添加数据](#5.4 添加数据)
      • [5.4.1 添加单个document](#5.4.1 添加单个document)
      • [5.4.2 添加多个document](#5.4.2 添加多个document)
    • [5.5 搜索数据](#5.5 搜索数据)
      • [5.5.1 搜索所有documents](#5.5.1 搜索所有documents)
      • [5.5.2 `match`查询](#5.5.2 match查询)
  • [6 总结](#6 总结)

1 背景

因电商项目发展的需要,商品数量越来越大,用户搜索的需求越来越高级(需要支持全文模糊搜索,并且性能要高),因此需要在项目中引入Elasticsearch。笔者0基础,简单看过一些关于Elasticsearch的知识点,今天通过Quick start快速切入Elasticsearch。后续会展开Elasticsearch的学习以及研究。

2 前言

  1. 笔者通过Elasticsearch的官方文档来学习,本文参考自:Quick start
  2. 建议读者先通篇阅读搭建ES的步骤,再回头仔细跟着敲命令搭建

3 快速部署ES

官方有提供试用版的ES云服务,笔者试用期已经过了,因此今天是通过Dokcer手动搭建ES(单节点集群)。
执行以下命令,创建ES容器:

java 复制代码
docker network create elastic
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.13.4
docker run --name es01 --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -t docker.elastic.co/elasticsearch/elasticsearch:8.13.4

启动成功后,会出现以下这段文字,含有Elasticsearch的秘密以及登录Kibana的token串,需要保存起来,后面会用到:

✅ Elasticsearch security features have been automatically configured!
✅ Authentication is enabled and cluster connections are encrypted.

ℹ️  Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
  84fZ4PuywWr_unOcr+JH

ℹ️  HTTP CA certificate SHA-256 fingerprint:
  1ebd4a12d92c70ee71467917d89f10dad1d39aa92935b5f8671af20c38cd542f

ℹ️  Configure Kibana to use this cluster:
• Run Kibana and click the configuration link in the terminal when Kibana starts.
• Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):
  eyJ2ZXIiOiI4LjEzLjQiLCJhZHIiOlsiMTcyLjIxLjAuMjo5MjAwIl0sImZnciI6IjFlYmQ0YTEyZDkyYzcwZWU3MTQ2NzkxN2Q4OWYxMGRhZDFkMzlhYTkyOTM1YjVmODY3MWFmMjBjMzhjZDU0MmYiLCJrZXkiOiJPV2FHMG84Qm85S1VKZVNRZkJPRTpyNlpWbl84dVE0MkE1NzN0NWw5aGZ3In0=

ℹ️ Configure other nodes to join this cluster:
• Copy the following enrollment token and start new Elasticsearch nodes with `bin/elasticsearch --enrollment-token <token>` (valid for the next 30 minutes):
  eyJ2ZXIiOiI4LjEzLjQiLCJhZHIiOlsiMTcyLjIxLjAuMjo5MjAwIl0sImZnciI6IjFlYmQ0YTEyZDkyYzcwZWU3MTQ2NzkxN2Q4OWYxMGRhZDFkMzlhYTkyOTM1YjVmODY3MWFmMjBjMzhjZDU0MmYiLCJrZXkiOiJOMmFHMG84Qm85S1VKZVNRZkJPRDpxc0pkX1pFZ1FQcTJ3ODU5dURfOG1nIn0=

  If you're running in Docker, copy the enrollment token and run:
  `docker run -e "ENROLLMENT_TOKEN=<token>" docker.elastic.co/elasticsearch/elasticsearch:8.13.4`

为方便下面敲命令,我们在Shell客户端保存ES的秘密,执行以下命令:

export ELASTIC_PASSWORD="your_password"

将SSL证书从容器复制到本地电脑:

docker cp es01:/usr/share/elasticsearch/config/certs/http_ca.crt .

验证ES是否有启动成功:

curl --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200

4 快速部署Kibana

新开一个Shell客户端session,执行以下命令创建Kibana容器:

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

启动成功后,会弹出Kibana的访问地址,复制到浏览器访问即可,注意,如果Kibana是部署在centos虚拟机内,访问地址要用虚拟机的ip地址

5 发送请求给ES

5.1 打开Kibana控制台

按照下图操作,打开Kibana控制台:

5.2 通过REST API发送请求

在控制台输入

GET /?pretty

点击运行即可,如下图所示:

5.3 通过curl发送请求

新开一个Shell客户端的session,发送以下命令,其中$ELASTIC_PASSWORD替换成Elasticsearch的密码:

curl --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200

5.4 添加数据

简单介绍ES中的数据概念:ES中的数据被叫做document ,类比关系型数据库中的一行记录,ES中的数据是以JSON结构存储 的。ES将document存在可搜索的索引

5.4.1 添加单个document

在Kibana中执行以下命令:

POST books/_doc
{"name": "Snow Crash", "author": "Neal Stephenson", "release_date": "1992-06-01", "page_count": 470}

响应报文的格式如下:

{
  "_index": "books",
  "_id": "O0lG2IsBaSa7VYx_rEia",
  "_version": 1,
  "result": "created",
  "_shards": {
    "total": 2,
    "successful": 2,
    "failed": 0
  },
  "_seq_no": 0,
  "_primary_term": 1
}

_id是document在索引中具有唯一标识的作用,可以类比关系型数据库中的主键ID。

5.4.2 添加多个document

执行以下请求,注意,使用 _bulk 端点在一次请求中添加多个文档。批量数据必须是换行符分隔的 JSON (NDJSON)。每行都必须以换行符 (\n) 结尾,包括最后一行。:

POST /_bulk
{ "index" : { "_index" : "books" } }
{"name": "Revelation Space", "author": "Alastair Reynolds", "release_date": "2000-03-15", "page_count": 585}
{ "index" : { "_index" : "books" } }
{"name": "1984", "author": "George Orwell", "release_date": "1985-06-01", "page_count": 328}
{ "index" : { "_index" : "books" } }
{"name": "Fahrenheit 451", "author": "Ray Bradbury", "release_date": "1953-10-15", "page_count": 227}
{ "index" : { "_index" : "books" } }
{"name": "Brave New World", "author": "Aldous Huxley", "release_date": "1932-06-01", "page_count": 268}
{ "index" : { "_index" : "books" } }
{"name": "The Handmaids Tale", "author": "Margaret Atwood", "release_date": "1985-06-01", "page_count": 311}

5.5 搜索数据

5.5.1 搜索所有documents

执行以下命令:

GET books/_search

响应报文中的_source就是构建索引的时候原始的JSON对象

5.5.2 match查询

执行以下命令,查询name中带有brave的document:

GET books/_search
{
  "query": {
    "match": {
      "name": "brave"
    }
  }
}

6 总结

  1. 通过官网的Quick start快速上手实操ES查询,使用了Docker部署ES和Kibana,Kibana充当提供控制台的角色,ES充当数据库的角色

  2. 可以通过2种方式发送请求:HTTP REST API;CURL命令,本质也是HTTP

  3. ES中有索引概念,索引中含有多个document,document是由一些JSON Object构成的

  4. 添加document有2个接口:添加单个documentPOST {索引名}/_doc;添加多个documentPOST /bulk,请求参数的格式如下:

    { "index" : { "_index" : "books" } }
    {"name": "Revelation Space", "author": "Alastair Reynolds", "release_date": "2000-03-15", "page_count": 585}

  5. 搜索数据有2个接口:全量查GET {索引名}/_search;match查GET {索引名}/_search,请求参数使用如下结构:

    {
    "query": {
    "match": {
    "name": "brave"
    }
    }
    }

相关推荐
bubble小拾6 小时前
ElasticSearch高级功能详解与读写性能调优
大数据·elasticsearch·搜索引擎
不能放弃治疗6 小时前
重生之我们在ES顶端相遇第 18 章 - Script 使用(进阶)
elasticsearch
hengzhepa7 小时前
ElasticSearch备考 -- Search across cluster
学习·elasticsearch·搜索引擎·全文检索·es
Elastic 中国社区官方博客9 小时前
Elasticsearch:使用 LLM 实现传统搜索自动化
大数据·人工智能·elasticsearch·搜索引擎·ai·自动化·全文检索
慕雪华年10 小时前
【WSL】wsl中ubuntu无法通过useradd添加用户
linux·ubuntu·elasticsearch
Elastic 中国社区官方博客12 小时前
使用 Vertex AI Gemini 模型和 Elasticsearch Playground 快速创建 RAG 应用程序
大数据·人工智能·elasticsearch·搜索引擎·全文检索
alfiy13 小时前
Elasticsearch学习笔记(四) Elasticsearch集群安全配置一
笔记·学习·elasticsearch
alfiy13 小时前
Elasticsearch学习笔记(五)Elastic stack安全配置二
笔记·学习·elasticsearch
丶21361 天前
【大数据】Elasticsearch 实战应用总结
大数据·elasticsearch·搜索引擎
闲人编程1 天前
elasticsearch实战应用
大数据·python·elasticsearch·实战应用