Elasticsearch基本使用

文章目录

    • 概要
    • 一、核心概念
    • 二、索引操作
      • 2.1 创建索引
      • 2.2 判断索引是否存在
      • 2.3 查看索引
      • 2.4 打开、关闭索引
      • 2.5 删除索引
    • 三、映射操作
      • 3.1 创建映射字段
      • 3.2 映射属性详解
      • 3.3 查看映射关系
    • 四、文档增删改查
      • 4.1 新增文档
      • 4.2 查看单个文档
      • 4.3 查看所有文档
      • 4.4 _source定制返回字段
      • 4.5 更新文档
      • 4.6 删除文档

概要

Elaticsearch简称为ES,是一个开源的可扩展的分布式的全文检索引擎,它可以近乎实时的存储、检索数据。本身扩展性很好,可扩展到上百台服务器,处理PB级别的数据。
本文基于7.x版本,总结ES常用的基本操作。
相关链接:
官网
es版本与jvm版本
下载地址
Rest风格API
Java客户端API

一、核心概念

Elasticsearch是基于Lucene的全文检索引擎,本质也是存储和检索数据。ES中的很多概念与MySQL类似 可以按照关系型数据库的经验去理解。

索引(index)
类似的数据放在一个索引,非类似的数据放不同索引, 一个索引也可以理解成一个关系型数据库。

类型(type)

代表document属于index中的哪个类别(type
type就像是数据库的表,比如dept表,user表。
注意ES每个大版本之间区别很大:
ES 5.x中一个index可以有多种type
ES 6.x中一个index只能有一种type
ES 7.x以后 逐渐移除type这个概念。

映射(mapping)

mapping定义了每个字段的类型等信息,相当于关系型数据库中的表结构。
常用数据类型: text、keyword、number、array、range、boolean、date、geo_point、ip、nested、object

MySQLElasticsearch
数据库Database索引index
表Table索引index类型(type)
数据行Row文档Document
数据列Column字段Field
约束Schema映射Mapping

二、索引操作

Elasticsearch采用Rest风格API,因此其API就是一次http请求,你可以用任何工具发起http请求

2.1 创建索引

语法:

PUT /索引名称
{
	"settings":{
		"属性名":"属性值"
	}
}

settings:索引库设置,可以定义索引库的属性,例如:分片数、副本数;也可以不设置,采用默认属性。
示例:
在这里插入图片描述

2.2 判断索引是否存在

语法:

HEAD/索引名称

示例:
在这里插入图片描述

2.3 查看索引

查看单个索引

语法:

GET /索引名称

在这里插入图片描述

批量查看索引

GET /索引名称1,索引名称2...

在这里插入图片描述

查看所有索引
方式一:

GET _all

在这里插入图片描述
方式二:

GET /_cat/indices?v

在这里插入图片描述
green:索引的所有分片都正常分配。
yellow:至少有一个副本没有得到正确的分配。
red:至少有一个主分片没有得到正确的分配。

2.4 打开、关闭索引

打开:

POST /索引名称/_open

在这里插入图片描述
关闭

POST /索引名称/_close

在这里插入图片描述

2.5 删除索引

DELETE /索引名称1,索引名称2...

在这里插入图片描述
再次查看
在这里插入图片描述

三、映射操作

索引创建之后,等于有了关系型数据库中的database。Elasticsearch7.x取消了索引type类型的设置,不允许指定类型,默认为_doc,但字段仍然是有的,需要设置字段的约束信息,叫做字段映射
mapping
字段的约束包括但不限于:

  • 字段的数据类型
  • 是否要存储
  • 是否要索引
  • 分词器

3.1 创建映射字段

PUT /test-index/_mapping
{
  "properties": {
    "字段名": {
      "type": "类型",
      "index": true,
      "store": true,
      "analyzer": "分词器"
    }
  }
}

字段名:跟mysql的字段一样,由用户命名
属性,例如:

  • type:类型,可以是text、long、short、date、integer、object
  • index:是否索引,默认为true
  • store:是否存储,默认为false
  • analyzer:指定分词器
PUT /ygp-company-index
PUT /ygp-company-index/_mapping/
{
  "properties": {
    "name": {
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "job": {
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "logo": {
      "type": "keyword",
      "index": "false"
    },
    "payment": {
      "type": "float"
    }
  }
}

在这里插入图片描述

3.2 映射属性详解

type

Elasticsearch支持的数据类型非常丰富:
在这里插入图片描述
这里挑选比较关键的进行说明

  • String类型,可分为两种

    • text: 可分词,不可参与聚合
    • keywork: 不可分词,数据作为完整字段进行匹配,可以参与聚合
  • Numerical:数值类型,分两类

    • 基本数据类型:long、integer、short、byte、double、float、half_float
    • 浮点数的高精度类型: scaled_float
  • Date:日期类型
    elasticsearch可以对日期格式化为字符串存储,但是建议存储为毫秒,存储为long,节省空间。

  • Array: 数组类型

    • 进行匹配时,任意一个元素满足,都认为满足
    • 排序时,如果升序则用数组中最小值来排序,如果降序则用数组中的最大值来排序
  • Object:对象

{
	"name":"Tome",
	"age": 20,
	"girl":{
		"name":"Rose","age":20,
	}
}

如果存储到索引库的是对象类型,例如上面的girl,会把girl变成两个字段:girl.name和girl.age

index

index影响字段的索引情况:

  • true:字段会被索引,则可以用来进行搜索。默认值就是true。
  • false:字段不会被索引,不能用来搜索

store
是否将数据进行独立存储
原始的文本会存储在_source里面,默认情况下其他提取出来的字段都不是独立存储的,是从_source里面提取出来的,页可以独立存储某个字段,设置store:true;获取独立存储的字段要比从_source中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置,默认为false。

analyzer
指定分词器
一般处理中文会选择ik分词器:ik_max_wordik_smart

3.3 查看映射关系

查看单个索引映射关系

GET /索引名称/_mapping

在这里插入图片描述

查看多个索引的映射

# 方式一
GET _mapping
# 方式二
GET all/_mapping

修改索引映射关系

PUT /索引名/_mapping
PUT /ygp-company-index/_mapping
{
  "properties": {
    "字段名": {
      "type": "类型",
      "index": true,
      "store": true,
      "analyzer": "分词器"
    }
  }
}

同时创建索引和设置映射

PUT /mcs-index
{
  "settings": {
    "索引库属性名": "索引库属性值"
  },
  "mappings": {
    "properties": {
      "字段名": {
        "映射属性名": "映射属性值"
      }
    }
  }
}

使用示例

PUT /activity-index
{
  "settings": {},
  "mappings": {
    "properties": {
      "activityCode": {
        "type": "keyword"
      },
      "activityName": {
        "type": "text",
        "analyzer": "ik_max_word"
      }
    }
  }
}

在这里插入图片描述

四、文档增删改查

文档,即数据库中的数据,会根据规则创建索引,将来用于搜索;可以类比数据库中的一行数据。

4.1 新增文档

新增文档,id的生成方式有两种,手动指定或者自动生成。

新增文档(手动指定)

POST /索引名称/_doc/{id}
{
	"field":"value"
}

在这里插入图片描述
新增文档(自动生成id)

POST /索引名称/_doc
{
	"field":"value"
}

在这里插入图片描述
可以看到结果显示为: created ,代表创建成功。
另外,需要注意的是,在响应结果中有个 _id 字段,这个就是这条文档数据的 唯一标识 ,以后的增删改查都依赖这个_id作为唯一标示,这里是Elasticsearch帮我们随机生成的id

4.2 查看单个文档

GET /索引名称/_doc/{id}

在这里插入图片描述
文档元数据解读:

元数据项含义
_indexdocument所属的index
_typedocument所属的type,Elasticsearch7.x默认type为_doc
_id代表document的唯一标识,与index一起,可以唯一标识和定位一个document
_versiondocument的版本号,Elasticsearch利用_version (版本号)的方式来确保应用中相互冲突的变更不会导致数据丢失。需要修改数据时,需要指定想要修改文档的version号,如果该版本不是当前版本号,请求将会失败
_seq_no严格递增的顺序号,每个document一个,严格递增,保证后写入的doc的_seq_no大于先写入的_seq_no
_primary_term任何类型的写操作,包括index、create、update和Delete,都会生成一个_seq_no。
foundtrue/false 是否查找到文档
_source存储原始文档

4.3 查看所有文档

POST /索引名称/_search
{
  "query": {
    "match_all": {}
  }
}

在这里插入图片描述

4.4 _source定制返回字段

某些业务场景下,我们不需要搜索引擎返回_source中的所有字段,可以使用source进行定制,如下,多个字段之间使用逗号分隔

GET /activity-index/_doc/111?_source=activityCode

在这里插入图片描述

4.5 更新文档

全部更新
更新文档为PUT操作,更新时需要指定id

  • id对应的文档存在,则修改
  • id对应的文档不存在,则新增
PUT /activity-index/_doc/3
{
  "activityCode": "FS202312240003",
  "activityName": "限时抢购活动003"
}

在这里插入图片描述
id=3这条记录不存在,返回的_result属性显示的时创建

再次执行上面的命令,并将数据修改一下:
在这里插入图片描述
此时显示的是修改
上面就是Elasticsearch使用PUT或者POST对文档进行更新(全部更新),如果指定ID的文档已经存在,则执行更新操作。
全部更新就是,Elasticsearch首先将旧的文档标记为删除状态,然后添加新的文档,旧的文档不会立即消失,也无法访问;Elasticsearch会在你继续添加更多数据的时候在后台清理已经标记为删除状态的文档。

局部更新
局部更新就是,只是修改某个字段

POST /activity-index/_update/111
{
  "doc": {
    "activityName": "限时抢购活动001"
  }
}

如果局部更新的文档不存在,则会返回异常
在这里插入图片描述

4.6 删除文档

根据id进行删除

DELETE /索引名称/_doc/{id}

根据查询条件删除


POST /activity-index/_delete_by_query
{
  "query": {
    "match": {
      "activityName": "限时抢购活动002"
    }
  }
}

删除所有

POST /activity-index/_delete_by_query
{
  "query": {
    "match_all": {}
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/269324.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux进阶系列(二)——lscpu、htop、seq、shuf、sort

1. lscpu lscpu 命令是Linux系统中用来显示关于CPU架构的信息的工具。它详细展示了CPU的相关信息,包括型号、核心数、架构类型、缓存大小等等。 1.1 物理CPU与逻辑CPU 物理CPU指的是实际存在于硬件系统上的中央处理单元。每个物理CPU都是一个独立的处理器芯片或处…

【LeetCode刷题笔记】动态规划(二)

647. 回文子串 解题思路: 1. 暴力穷举 , i 遍历 [0, N) , j 遍历 [i+1, N] ,判断每一个子串 s[i, j) 是否是回文串,判断是否是回文串可以采用 对撞指针 的方法。如果是回文串就计数 +1

C# 类型和成员

C# 教程 - 类型及其成员 - C# | Microsoft Learnhttps://learn.microsoft.com/zh-cn/dotnet/csharp/tour-of-csharp/types 目录 类和对象 类型参数 基类 结构 接口 枚举 可为 null 的类型 元组 作为面向对象的语言,C# 支持封装、继承和多态性这些概念。 类可…

算法——链表

链表常用技巧 画图分析!!!!!!!!!!——直观形象,便于理解、大多数都是模拟引入虚拟头结点(哨兵位) 典型的就是在第一个节点…

Redis设计与实现之服务器与客户端

目录 一、服务器与客户端 1、初始化服务器 1. 初始化服务器全局状态 2. 载入配置文件 3. 创建 daemon 进程 4. 初始化服务器功能模块 5. 载入数据 6. 开始事件循环 2、 客户端连接到服务器 3、命令的请求、处理和结果返回 4、命令请求实例:SET 的执行过程 5、Redis服…

【浏览器】同源策略和跨域

1. 什么是跨域 在说跨域之前,先说说同源策略,什么是同源策略呢?同源策略是浏览器的一种安全机制,减少跨站点脚本攻击(XSS,Cross Site Scripting)、跨站点请求伪造(CSRF,Cross Site Request Forgery)攻击等,因为非同源的请求会被浏览器拦截掉。 同源就是协议、域名(…

电路设计(7)——窗口比较器的multism仿真

1.功能设计 构建一个窗口比较器的电路,在输入电压大于3.5v,小于0.8v时,蜂鸣器报警,输入电压在0.8v到3.5v之间时,不报警。 整体电路如下: 2.设计思路 在输入端,采取电阻分压的方式,输…

ChatGPT/GPT4+AI绘图+论文写作+编程结合到底有多强大?带你详细了解

ChatGPT在论文写作与编程方面具备强大的能力。无论是进行代码生成、错误调试还是解决编程难题,ChatGPT都能为您提供实用且高质量的建议和指导,提高编程效率和准确性。此外,ChatGPT是一位出色的合作伙伴,可以为您提供论文写作的支持…

Jenkins自动化部署之后端

准备工作参考本人另外几篇Jenkins相关的文章 新建任务 添加参数配置 字符串参数:分支名称 多选框:项目名称(Extended Choice Parameter插件必备,插件安装参考我另外的文章) 这个分割规则自定义。只要根据Jenkins…

【Java】MybatisPlus

MybatisPlus MybatisPlus是在mybatis基础上的一个增强型工具。它对mybatis的一些操作进行了简化,能够提高开发的效率。 springboot整合了mybatis之后,其实已经非常方便了,只需要导入mybatis的包后,在配置文件中编写数据源信息&a…

MySQL的替换函数及补全函数的使用

前提: mysql的版本是8.0以下的。不支持树形结构递归查询的。但是,又想实现树形结构的一种思路 提示:如果使用的是MySQL8.0及其以上的,想要实现树形结构,请参考:MySQL数据库中,如何实现递归查询…

渗透测试——1.2被动扫描

一、概念 目标无法觉察的情况下进行的信息收集。公开渠道可获得的信息,与目标系统不产生直接交互,尽量避免留下一切痕迹。 二、CDN(content delivery netword内容分发网路) 多台边缘服务器提供网络服务, 三、WAF&am…

CRS-4995: The command ‘start resource’ is invalid in crsctl.

ntp时间调整后,节点1,advm 和acfs offline 处理办法: /u01/app/12.2.0.1/grid/bin/crsctl stop crs /u01/app/12.2.0.1/grid/bin/crsctl start crs 曾经尝试如下命令不起作用 /u01/app/12.2.0.1/grid/bin/acfsload start /u01/app/12.2…

Quartz持久化(springboot整合mybatis版本实现调度任务持久化)--提供源码下载

1、Quartz持久化功能概述 1、实现使用quartz提供的默认11张持久化表存储quartz相关信息。 2、实现定时任务的编辑、启动、关闭、删除。 3、实现自定义持久化表存储quartz定时任务信息。 4、本案例使用springboot整合mybatis框架和MySQL数据库实现持久化 5、提供源码下载 …

Tofu5m目标识别跟踪模块 跟踪模块

Tofu5m 是高性价比目标识别跟踪模块,支持可见光视频或红外网络视频的输入,支持视频下的多类型物体检测、识别、跟踪等功能。 产品支持视频编码、设备管理、目标检测、深度学习识别、跟踪等功能,提供多机版与触控版管理软件,为二次…

cuda加速求解龙格库塔四阶五步积分

一般代码使用cuda加速的方法: 使用PyTorch进行加速: 首先,你需要将你的ODE系统定义为PyTorch模型,这样可以利用PyTorch的自动微分功能和GPU加速。然后,你需要将数据和参数转换为PyTorch张量,并将它们移动到…

Java之AQS(AbstractQueuedSynchronizer)

Java之AQS(AbstractQueuedSynchronizer) AQS 介绍 AQS 的全称为 AbstractQueuedSynchronizer ,翻译过来的意思就是抽象队列同步器。这个类在 java.util.concurrent.locks 包下面。 ● 是用来实现锁或者其他同步器组件的公共基础部分的抽象实…

抖店爆品之后,为什么流量一蹶不振?

我是电商珠珠 做抖店的商家,一般都会遇到在爆品之后,流量出现断崖式下跌的情况。很多商家并不知道是什么原因,觉得平台莫名其妙的。 我做抖店也已经有三年时间了,你们所遇到的问题都是我曾经遇到过的。 所以,出现这…

Mybatis缓存机制详解与实例分析

前言: 本篇文章主要讲解Mybatis缓存机制的知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮助希望可以支持下哦~ 小威在此先感谢各位小伙伴儿了😁 以下正文开始 Mybat…

2023_Spark_实验三十三:配置Standalone模式Spark3.4.2集群

实验目的:掌握Spark Standalone部署模式 实验方法:基于centos7部署Spark standalone模式集群 实验步骤: 一、下载spark软件 下载的时候下载与自己idea里对应版本的spark News | Apache Spark 选择任意一个下载即可 - spark 3.4.1 - spark …