前端玩转elasticsearch入门

发布于:2024-05-08 ⋅ 阅读:(16) ⋅ 点赞:(0)

什么是elasticsearch?

一个开源的分布式搜索引擎,底层是开源库Lucene,可以用来实现海量数据的搜索、日志统计、分析、系统监控等功能。对搜索引擎的操作封装成了RESTful的API,通过http请求就能对其进行操作。

ELK技术栈 image.png

准备工作之安装docker

mac商城直接安装desktop, 安装好了直接pull elasticsearch和kibana镜像(注意版本适配,参考官网) image.png

运行容器

image.png

访问kibana

  • 获取token
    找到elasticsearch容器运行ID docker ps
    进容器docker exec -it 容器运行ID bash
    生成tokenbin/elasticsearch-create-enrollment-token --scope kibana

  • 获取elasticsearch的账号密码
    找到elasticsearch容器运行ID docker ps
    进容器docker exec -it 容器运行ID bash
    自动生成账号密码./bin/elasticsearch-setup-passwords auto

image.png

登陆进去就可以愉快的玩耍devtool image.png

ES数据库基本概念

索引和映射

索引就像数据库里的表,映射就像数据库中定义的表结构 例如:

  • 所有用户文档,就可以组织在一起,称为用户的索引;
  • 所有商品的文档,可以组织在一起,称为商品的索引;
  • 所有订单的文档,可以组织在一起,称为订单的索引; image.png

因此,我们可以把索引当做是数据库中的表。

数据库的表会有约束信息,用来定义表的结构、字段的名称、类型等信息。因此,索引库中就有映射(mapping) ,是索引中文档的字段约束信息,类似表的结构约束。

Mapping映射

mapping是对索引库中文档的约束,常见的mapping属性包括:

  • type:字段数据类型,常见的简单类型有:

    • 字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)

      keyword类型只能整体搜索,不支持搜索部分内容

    • 数值:long、integer、short、byte、double、float、

    • 布尔:boolean

    • 日期:date

    • 对象:object

  • index:是否创建索引参与搜索,默认为true

  • analyzer:使用哪种分词器

  • properties:该字段的子字段

举个🌰

{    
"age": 21,    
"weight": 52.1,    
"isMarried": false,    
"info": "真相只有一个!", 
"email": "zy@itcast.cn", 
"score": [99.1, 99.5, 98.9],    
}

对应的每个字段映射(mapping):

  • age:类型为 integer;参与搜索,因此需要index为true;无需分词器
  • weight:类型为float;参与搜索,因此需要index为true;无需分词器
  • isMarried:类型为boolean;参与搜索,因此需要index为true;无需分词器
  • info:类型为字符串,需要分词,因此是text;参与搜索,因此需要index为true;分词器可以用ik_smart
  • email:类型为字符串,但是不需要分词,因此是keyword;不参与搜索,因此需要index为false;无需分词器
  • score:虽然是数组,但是我们只看元素的类型,类型为float;参与搜索,因此需要index为true;无需分词器

索引库操作

CRUD简单描述:

  • 创建索引库:PUT /索引库名
  • 查询索引库:GET /索引库名
  • 删除索引库:DELETE /索引库名
  • 修改索引库(添加字段):PUT /索引库名/_mapping

创建

image.png

查询

image.png

修改(添加新字段)

image.png image.png

文档和字段

一个文档就像数据库里的一条数据,字段就像数据库里的列,所有文档组织在一起可以称之为索引。 elasticsearch是面向文档(Document) 存储的,可以是数据库中的一条商品数据,一个订单信息。文档数据会被序列化为json格式后存储在elasticsearch中:

image.png

而Json文档中往往包含很多的字段(Field) ,类似于mysql数据库中的列

文档操作

文档操作有哪些?

  • 创建文档:POST /{索引库名}/_doc/文档id
  • 查询文档:GET /{索引库名}/_doc/文档id
  • 删除文档:DELETE /{索引库名}/_doc/文档id
  • 修改文档:
    • 全量修改:PUT /{索引库名}/_doc/文档id
    • 增量修改:POST /{索引库名}/_update/文档id { "doc": {字段}}

创建

image.png

查询

image.png

修改

  1. 全量修改是覆盖原来的文档,其本质是:
  • 根据指定的id删除文档
  • 新增一个相同id的文档 image.png

image.png

  1. 增量修改
  • 增量修改是只修改指定id匹配的文档中的部分字段。
POST /{索引库名}/_update/文档id 
{     
    "doc": 
        { 
            "字段名""新的值", 
        } 
}

image.png

查看所有索引

image.png

IK分词

github:

进es容器 安装对应版本分词器后需重启es服务:

`bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.13.0`

IK分词器包含两种模式:

  • ik_smart:最少切分
  • ik_max_word:最细切分

测试分词功能: image.png

先到这


网站公告

今日签到

点亮在社区的每一天
去签到