ElasticSearch 用法

news2024/11/15 14:10:17

首先讲下 ES的倒排序索引

入门-倒排索引

正排索引(传统)

idcontent
1001my name is zhang san
1002my name is li si

倒排索引

keywordid
name1001, 1002
zhang1001

正排索引:我想查name,这时候是模糊的查询,会循环遍历并且同时也会使索引失效

倒排索引:我相查name,这时候直接就查到id==1001,1002,然后再关联文章内容

Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。 为了方便大家理解,我们将 Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比

ES 里的 Index 可以看做一个库,而 Types 相当于表, Documents 则相当于表的行。这里 Types 的概念已经被逐渐弱化, Elasticsearch 6.X 中,一个 index 下已经只能包含一个type, Elasticsearch 7.X 中, Type 的概念已经被删除了。

es, 倒排索引优点
倒排索引是不可更改的,一旦它被建立了,里面的数据就不会再进行更改。这样做就带来了以下几个好处:

1. 不用给索引加锁,因为不允许被更改,只有读操作,所以就不用考虑多线程导致互斥等问题。

2. 索引一旦被加载到了缓存中,大部分访问操作都是对内存的读操作,省去了访问磁盘带来的io开销。

3. 倒排索引具有不可变性,所有基于该索引而产生的缓存也不需要更改,因为没有数据变更。

4. 倒排索引可以压缩数据,减少磁盘io及对内存的消耗。

如何在ES上创建索引

首先打开kibanba

进入到控制台然后开始创建索引

之前说过es中索引对应的是mysql的数据库,所以我们应该先创建索引

创建索引语法:put shooping 

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "shopping"
}
会返回这几个字段,分别代表

acknowledged:代表是创建索引创建成功

shards_acjnowledged: 代表所有分片创建成功

index:代表索引的名字

然后再次put的,会出现这种情况 put是具有幂等性的

{
  "error" : {
    "root_cause" : [
      {
        "type" : "resource_already_exists_exception",
        "reason" : "index [shopping/32XXUAigSX-96lF9wV49Aw] already exists",
        "index_uuid" : "32XXUAigSX-96lF9wV49Aw",
        "index" : "shopping"
      }
    ],
    "type" : "resource_already_exists_exception",
    "reason" : "index [shopping/32XXUAigSX-96lF9wV49Aw] already exists",
    "index_uuid" : "32XXUAigSX-96lF9wV49Aw",
    "index" : "shopping"
  },
  "status" : 400
}
error:表示错误

root_cause:表示错误的列表

type:表示错误类型

reason:错误的原因

index_uuid:唯一标识

index:索引名字

如果想用post请求会发送什么,post是不具有幂等性的

Incorrect HTTP method for uri [/shopping?pretty=true] and method [POST], allowed: [HEAD, PUT, GET, DELETE]",

方法不能使用post,直接报错

查询索引语法:get shopping

{
  "shopping" : {
    "aliases" : { },
    "mappings" : { },
    "settings" : {
      "index" : {
        "creation_date" : "1710766914710",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "uuid" : "32XXUAigSX-96lF9wV49Aw",
        "version" : {
          "created" : "7080099"
        },
        "provided_name" : "shopping"
      }
    }
  }
}

shopping:索引名字

aliases:索引别名

mappings:意识就是文档结构和字段类型

settings:设置索引的信息

index:索引级的设置

creation_date:创建时间

number_of_shards:索引分片的数量

number_of_replicas:每个分片的副本数量

uuid:uuid

version:版本号

provided_name:提供的索引名字

查询全部索引语法:get _cat/indices?v

表头    含义
health    当前服务器健康状态: green(集群完整) yellow(单点正常、集群不完整) red(单点不正常)
status    索引打开、关闭状态
index    索引名
uuid    索引统一编号
pri    主分片数量
rep    副本数量
docs.count    可用文档数量
docs.deleted    文档删除状态(逻辑删除)
store.size    主分片和副分片整体占空间大小
pri.store.size    主分片占空间大小

删除索引语法:delete shopping

{
  "acknowledged" : true
}
acknowledged:是否成功

创建es数据语法:post /shopping/_doc

{
  "error" : {
    "root_cause" : [
      {
        "type" : "parse_exception",
        "reason" : "request body is required"
      }
    ],
    "type" : "parse_exception",
    "reason" : "request body is required"
  },
  "status" : 400
}
文档对应的是数据库中数据

这个原因就是没有body数据,并且我们传递数据是json

试着这种修改一下

{
  "_index" : "shopping", 
  "_type" : "_doc",
  "_id" : "iQPEUY4Bonlp-IezIGqE",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

index:索引

type:文档

id:唯一标识

result:结果

shards:分配

total:分片总数

successful:成功数量

failed:失败数量

seq_no:文档序列号,序列号越大标识越新

_primary_term:文档所属的主要分片的任期号

当在发送一模一样的请求

id一直在变化,如果我们想查询某个数据,id太麻烦了,如果想自定义呢

创建es数据指定id语法:post /shopping/_doc/1001

如果我们指定了id,这时候就可以用put,因为他是幂等性

主键查询和全局查询语法

主键查询:get /shopping/_doc/1001

{
  "_index" : "shopping",             //索引
  "_type" : "_doc",                     //类型
  "_id" : "1001",                        //id
  "_version" : 2,                       //版本号
  "_seq_no" : 5,                       //序列号
  "_primary_term" : 1,
  "found" : true,                      //成功
  "_source" : {                        //信息
    "name" : "huyin",
    "age" : "21",
    "sex" : "男"
  }
}

查询没有的数据

{
  "_index" : "shopping", 
  "_type" : "_doc",             
  "_id" : "1002",
  "found" : false
}

查询全部数据语法:get /shopping/_search

{
  "took" : 0,                          //      耗时 
  "timed_out" : false,            //    超时
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 5,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [                           //命中
      {
        "_index" : "shopping",
        "_type" : "_doc",
        "_id" : "iQPEUY4Bonlp-IezIGqE",
        "_score" : 1.0,
        "_source" : {
          "name" : "huyin",
          "age" : "21",
          "sex" : "男"
        }
      },
      {
        "_index" : "shopping",
        "_type" : "_doc",
        "_id" : "AQPJUY4Bonlp-IezE2v3",
        "_score" : 1.0,
        "_source" : {
          "name" : "huyin",
          "age" : "21",
          "sex" : "男"
        },
    ]
  }
}

全局修改和局部修改语法

全局修改:put /shopping/_doc/1001

put具有幂等性所以可以用

{
  "_index" : "shopping",
  "_type" : "_doc",
  "_id" : "1001",
  "_version" : 3,             // 版本号是一直变化的
  "result" : "updated",    结果:updated 修改
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 6,
  "_primary_term" : 1
}

局部修改:post /shopping/_update/1001

get请求一个:get /shopping/_doc/1001

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++开发基础——函数模板

一,函数模板 1.基础概念 模板编程是C中泛型编程的基础。 一个模板可以是创建类或者函数的蓝图。 模板编程分两种,分别是算法抽象的模板、数据抽象的模板。算法抽象的模板以函数模板为主,数据抽象的模板以类模板为主。 基于函数模板生成的…

合成孔径雷达(SAR)RD算法点目标成像与分析Matlab仿真

文章目录 一、概述二、仿真思路1.概述2.高分3号简介与基本参数 三、回波生成1.卫星运行速度计算2.几何3.信号参数与时间轴生成(1)信号参数(2)时间轴生成 4.点目标回波生成(1)点目标坐标设置(2)回波生成 四、低斜视角处理1.距离压缩2.方位向傅里叶变换3.距离徙动校正4.方位压缩5…

转录因子/组蛋白修饰靶基因数据库:Cistrome DB使用教程

最近有小伙伴经常询问怎么预测转录因子的下游靶基因,以及预测一些组蛋白修饰影响的靶基因信息。今天就给大家介绍一下Cistrome数据浏览器(Cistrome Data Browser)。 Cistrome DB是来自人类和小鼠的ChIP-seq、ATAC-seq和DNase-seq数据的资源&…

内网穿透利器 n2n 搭建指南

1. n2n 简介 上文实验分析了 FRP 和 Zerotier 的利弊,本文再介绍另一种内网穿透方案,n2n。 n2n 是 C/S 架构的内网穿透服务,不同于 FRP 的 反向代理,它的原理是类似 Zerotier 的先打孔,打孔失败再尝试转发。关于打孔本…

深入理解Netty以及为什么项目中要使用?(二)Reactor模型

Reactor模型 了解了NIO多路复用后,就有必要再和大家说一下Reactor多路复用高性能I/O设计模式,Reactor本质上就是基于NIO多路复用机制提出的一个高性能IO设计模式,它的核心思想是把响应IO事件和业务处理进行分离,通过一个或者多个…

BUUCTF-Ezsql1

1.打开靶机 打开第一个链接 2.万能密码 使用万能密码:a or 1 # 密码为随意 第二个用kali打开 3.ssh连接靶机 ssh ctf284490d0-7600-4c65-9160-5ced02f45633.node5.buuoj.cn -p 28191 由题可知密码为123456 4.找到并修改index.php文件 找到index.php文件 #内容如…

常见排序及查找算法

内容引用自: 【数据结构和算法】十大经典排序算法(动图演示) 算法复杂度 1、冒泡排序 1.1、动图演示 遍历列表数据,共遍历length(列表)次,每一次的遍历都要从左到右进行两两比对,左边比右边小&#xff0…

机器人路径规划:基于Bug算法的机器人路径规划(提供Python代码)

一、Bug算法简介 Bug 算法是一种基于追踪障碍物的路径规划算法,它模拟了一种昆虫寻找巢穴的行为,因此得名Bug算法。Bug算法的基本思路是:当机器人遇到障碍物时,他会沿着障碍物的边缘行走,直到到达目标点。该算法可以分…

代码随想录算法训练营第二十五天|216.组合总和III,17.电话号码的字母组合

216.组合总和III 题目 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。 说明: 所有数字都是正整数。 解集不能包含重复的组合。 示例 1: 输入: k 3, n 7 输出: [[1,2,4]] 示例 2: 输入…

深入了解JVM底层原理

一、JVM内存结构 1、方法区:存储编译后的类、常量等(.class字节码文件) 2、堆内存:存储对象 3、程序计数器:存储当前执行的指令地址(计算机处理器(CPU)正在执行的下一条指令在内存…

Java后端八股----JVM篇

上图中线程1,2如果资源被抢占了,则程序计数器记录一下执行的行号,等到资源就绪后会从记录的行号继续向后执行。 Java8把静态变量以及常量放到了线程的本地内存原空间中(避免放在堆中不可控)。 👆图中第二种情况不太容易出现…

【Chapter1】操作系统概述,计算机操作系统教程,第四版,左万利,王英

文章目录 一、操作系统的基本概念1.1操作系统的层次结构1.2操作系统的运行视图1.3操作系统的概念(定义)1.4操作系统的功能和目标1.4.1操作系统的功能和目标——作为系统资源的管理者1.4.2操作系统的功能和目标——向上层提供方便易用的服务1.4.2.1GUI:图形化用户接口…

CPU vs. GPU :本质差异是?

他们的目的都是做并行计算的,但并行计算可分为时间上的并行和空间上的并行。所以我觉得本质差异是: CPU 时间并行GPU 空间并行 这样就容易理解他们的工作方式: 对CPU来说,不同的核心可以执行不同的机器指令但GPU则不同&#xff…

长安链开源社区发布2023年度长安链优秀应用案例

1月27日结束的“长安链发布三周年庆暨生态年会”上,在国家区块链技术创新中心的指导下,长安链开源社区联合长安链生态联盟正式发布2023年度长安链行业示范案例、领域精品案例及特色创新案例。 本次评选面向2023年度应用长安链上线并取得应用成效的案例&…

SSA优化最近邻分类预测(matlab代码)

SSA-最近邻分类预测matlab代码 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新型的群智能优化算法,在2020年提出,主要是受麻雀的觅食行为和反捕食行为的启发。 数据为Excel分类数据集数据。 数据集划分为训练集、验证集、测试集,比例为8&#…

intelliJ配置Android环境 与 文件目录解释

实验目的与要求: 目的:掌握面向Android编程的开发环境搭建。学习、掌握Android程序编写基本步骤,例如,Android Studio平台编写简单的一个 HelloWorld程序,掌握编译、运行等基本步骤和操作。 内容要求: 搭建…

杂货铺 | vscode配置C/C++环境(亲测极简ver)

文章目录 📚Step1:下载安装VSCode📚Step2:下载安装g📚Step3:编辑环境变量📚Step4:安装vscode插件📚Step5:建好文件夹⭐️📚Step6:开始…

【Node.js从基础到高级运用】十三、NodeJS中间件高级应用

在现代web开发中,Node.js因其高效和灵活性而备受青睐。其中,中间件的概念是构建高效Node.js应用的关键。在这篇博客文章中,我们将深入探讨Node.js中间件的高级应用,包括创建自定义中间件、使用第三方中间件等。我们将从基础讲起&a…

qt vs 编程 字符编码 程序从源码到编译到显示过程中存在的字符编码及隐藏的字符编码转换

理解字符编码,请参考:unicode ucs2 utf16 utf8 ansi GBK GB2312 CSDN博客 了解windows字符显示必须了解locale概念 参考:揭密 Windows 上的各种 locale - 知乎 汉字(或者说多字节字符)的存放需求,是计算…

【CSP试题回顾】202309-2-坐标变换(其二)

CSP-202309-2-坐标变换&#xff08;其二&#xff09; 解题代码 #include <iostream> #include <vector> #include <cmath> #include <iomanip> using namespace std;struct MyOpt {double k, theta; }; int n, m, opt, s, e; double para, x, y;int …