使用 Elasticsearch 1

news2024/12/27 13:33:48

了解如何创建索引,添加,删除,更新文档
参考文档 开始使用 Elasticsearch 1

本文用到Elasticsearch和Kibana 可以看之前的两篇先安装好
Elasticsearch 安装
Kibana安装

Elasticsearch 里的接口都是通过 REST 接口来实现的。

GET						读取数据
POST					插入数据
PUT 或 PATCH			更新数据,或如果是一个新的 id,则插入数据
DELETE					删除数据

http://localhost:5601/app/dev_tools
在这里插入图片描述

在这里插入图片描述

GET /

在这里插入图片描述
还可以复制为Curl
在这里插入图片描述

curl -XGET "https://1270.0.1:9200/" -H "kbn-xsrf: reporting"

同样可以 复制curl至页面就会变成 GET /
在这里插入图片描述


查看当前索引的 mapping:

GET dada/_mapping
{
  "dada": {
    "mappings": {
      "properties": {
        "cc": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "uid": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "user": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        }
      }
    }
  }
}

Elasticsearch 的数据类型:

text:							全文搜索字符串
keyword:						用于精确字符串匹配和聚合
date 及 date_nanos:				格式化为日期或数字日期的字符串
byte, short, integer, long:	整数类型
boolean:						布尔类型
float,double,half_float:		浮点数类型
分级的类型:object 及 nested。

创建一个索引 test,并且含有 id 及 message 字段。id 字段为 keyword 类型,而 message 字段为 text 类型,那么我们可以使用如下的方法来创建:

PUT test
{
  "mappings": {
    "properties": {
      "id": {
        "type": "keyword"
      },
      "message": {
        "type": "text"
      }
    }
  }
}
#--------返回结果--------
{
  "acknowledged": true,
  "shards_acknowledged": true,
  "index": "test"
}

追加一个新的字段 age,并且它的类型为 long 类型:

PUT test/_mapping
{
  "properties": {
    "age": {
      "type": "long"
    }
  }
}
#--------返回结果--------
{
  "acknowledged": true
}
#查看结果
GET test/_mapping
#--------返回结果--------
{
  "test": {
    "mappings": {
      "properties": {
        "age": {
          "type": "long"
        },
        "id": {
          "type": "keyword"
        },
        "message": {
          "type": "text"
        }
      }
    }
  }
}

_refresh用于使新文档在搜索时可见。
反过来,_flush用于在硬盘上持久化内存段。
_flush不会影响Elasticsearch中文档的可见性,因为搜索是在内存段中进行的,而_refresh会影响它们的可见性。

#存在就会修改
PUT dada/_doc/2
{
  "user":"222",
  "uid":2,
  "cc":"222"
}
#存在就会返回报错
PUT dada/_create/2
{
  "user":"222",
  "uid":2,
  "cc":"222"
}
#效果一样
PUT dada/_doc/2?op_type=create
{
  "user":"22222",
  "uid":2,
  "cc":"222"
}
#--------返回报错--------
{
  "error": {
    "root_cause": [
      {
        "type": "version_conflict_engine_exception",
        "reason": "[2]: version conflict, document already exists (current version [2])",
        "index_uuid": "gFA5LQXRQIef2WBv3d_aWw",
        "shard": "0",
        "index": "dada"
      }
    ],
    "type": "version_conflict_engine_exception",
    "reason": "[2]: version conflict, document already exists (current version [2])",
    "index_uuid": "gFA5LQXRQIef2WBv3d_aWw",
    "shard": "0",
    "index": "dada"
  },
  "status": 409
}

查询只看_source部分

GET dada/_doc/2
#正常返回
{
  "_index": "dada",
  "_id": "2",
  "_version": 2,
  "_seq_no": 6,
  "_primary_term": 1,
  "found": true,
  "_source": {
    "user": "222",
    "uid": 2,
    "cc": "222"
  }
}
#--------_source-------
GET dada/_source/2
#返回
{
  "user": "222",
  "uid": 2,
  "cc": "222"
}

自动 ID 生成

使用 POST

POST dada/_doc/
{
  "user":"55",
  "uid":5,
  "cc":"55"
}
#-----返回的结果:-----
{
  "_index": "dada",
  "_id": "u_g9C4kB2SZh9y2Iu2Gc",
  "_version": 1,
  "result": "created",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 7,
  "_primary_term": 1
}

只读部分数据

GET dada/_doc/2?_source=user,uid
#-----返回的结果------
{
  "_index": "dada",
  "_id": "2",
  "_version": 2,
  "_seq_no": 6,
  "_primary_term": 1,
  "found": true,
  "_source": {
    "user": "222",
    "uid": 2
  }
}
GET dada/_source/2?_source=user,uid
#-----返回的结果------
{
  "user": "222",
  "uid": 2
}

一次请求查找多个文档 _mget

GET _mget
{
  "docs":[
    {
      "_index":"dada",
      "_id":2
    },
    {
      "_index":"test",
      "_id":"vPhIC4kB2SZh9y2IU2G6"
    }
  ]
}
#-----------返回的结果------------
{
  "docs": [
    {
      "_index": "dada",
      "_id": "2",
      "_version": 2,
      "_seq_no": 6,
      "_primary_term": 1,
      "found": true,
      "_source": {
        "user": "222",
        "uid": 2,
        "cc": "222"
      }
    },
    {
      "_index": "test",
      "_id": "vPhIC4kB2SZh9y2IU2G6",
      "_version": 1,
      "_seq_no": 0,
      "_primary_term": 1,
      "found": true,
      "_source": {
        "age": 20,
        "id": 11,
        "message": "lalalalaaaa"
      }
    }
  ]
}

也可以只获得部分字段

GET _mget
{
  "docs":[
    {
      "_index":"dada",
      "_id":2,
      "_source":["user","uid"]
    },
    {
      "_index":"test",
      "_id":"vPhIC4kB2SZh9y2IU2G6"
    }
  ]
}
#---------返回的结果---------
{
  "docs": [
    {
      "_index": "dada",
      "_id": "2",
      "_version": 2,
      "_seq_no": 6,
      "_primary_term": 1,
      "found": true,
      "_source": {
        "user": "222",
        "uid": 2
      }
    },
    {
      "_index": "test",
      "_id": "vPhIC4kB2SZh9y2IU2G6",
      "_version": 1,
      "_seq_no": 0,
      "_primary_term": 1,
      "found": true,
      "_source": {
        "age": 20,
        "id": 11,
        "message": "lalalalaaaa"
      }
    }
  ]
}

GET _mget
{
  "docs":[
    {
      "_index":"dada",
      "_id":2,
      "_source":["user","uid"]
    },
    {
      "_index":"dada",
      "_id":1
    }
  ]
}
#--------可简写:---------
GET dada/_mget
{
  "ids":["1","2"]
}
#------------返回结果------------
{
  "docs": [
    {
      "_index": "dada",
      "_id": "1",
      "_version": 1,
      "_seq_no": 0,
      "_primary_term": 1,
      "found": true,
      "_source": {
        "user": "GB",
        "uid": "sss",
        "cc": "aa"
      }
    },
    {
      "_index": "dada",
      "_id": "2",
      "_version": 2,
      "_seq_no": 6,
      "_primary_term": 1,
      "found": true,
      "_source": {
        "user": "222",
        "uid": 2,
        "cc": "222"
      }
    }
  ]
}

修改一个文档

在上面我们看到了可以使用 POST 的命令来修改改一个文档。通常我们使用 POST 来创建一个新的文档。在使用 POST 的时候,我们甚至不用去指定特定的 id,系统会帮我们自动生成。但是我们修改一个文档时,我们通常会使用 PUT 来进行操作,并且,我们需要指定一个特定的 id 来进行修改:

PUT修改时,每一项都会改

PUT test/_doc/1
{
  "age":110,
  "id":1212
}

使用POST 只改需要改的字段,其他字段会保留下来

POST test/_update/1
{
  "doc": {
    "age":22222,
    "id":20
  }
}

先查询后修改

通过查询的方式来进行查询,让后进行修改。ES 也提供了相应的 REST 接口。

会把所有age为22222的都修改

POST test/_update_by_query
{
  "query": {
    "match": {
      "age": "22222"
    }
  },
  "script": {
    "source": "ctx._source.id=params.id;ctx._source.message=params.message",
    "lang": "painless",
    "params":{
      "id":888,
      "message":"new哈哈哈",
      "oth":"????"
    }
  }
}

可以通过 update 接口,使用 script 的方法来进行修改。这个方法也是需要知道文档的 id

POST test/_update/vPhIC4kB2SZh9y2IU2G6
{
  "script": {
    "source": "ctx._source.id=params.id;ctx._source.message=params.message",
    "lang": "painless",
    "params":{
      "id":999,
      "message":"new999哈哈哈",
      "oth":"??999??"
    }
  }
}
#------返回结果--------
{
  "_index": "test",
  "_id": "vPhIC4kB2SZh9y2IU2G6",
  "_version": 2,
  "result": "updated",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 9,
  "_primary_term": 1
}

在我们使用上面的方法更新文档时,如果当前的文档 id 不存在,那么我们甚至可以使用 upsert 属性来创建一个文档:

POST test/_update/3
{
  "script": {
    "source": "ctx._source.id=params.id;ctx._source.message=params.message",
    "lang": "painless",
    "params":{
      "id":999,
      "message":"new999哈哈哈",
      "oth":"??999??"
    }
  },
  "upsert":{
    "id":3,
    "message":"3333333"
  }
}

我们甚至可以使用 _update 接口使用 ctx[‘_op’] 来达到删除一个文档的目的,比如:

当检测文档的 字段id 是否为 888,如果为 888 的话,那么该文档将被删除,否则将不做任何事情。
POST test/_update/1
{
  "script": {
    "source":"""
    if(ctx._source.id == 888){
      ctx.op = 'delete'
    }else {
      ctx.op = 'none'
    }
    """
  }
}
#------返回---------
{
  "_index": "test",
  "_id": "1",
  "_version": 7,
  "result": "deleted",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 11,
  "_primary_term": 1
}

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

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

相关文章

Scrapy框架之MongoDB通过配置文件管理参数--Linux安装MongoDB--图形管理工具

目录 MongoDB通过配置文件 问题 解决方案 步骤 提示 Linux安装MongoDB 环境 下载依赖与安装包 解压安装 MongoDB GUI管理工具 独立软件GUI软件 Robo 3T使用 VSCode集成GUI插件 MongoDB通过配置文件 问题 启动MongoDB时,编写参数太麻烦 解决方案 通过配…

【PCL】(三)读写PCD文件

文章目录 &#xff08;三&#xff09;读写PCD文件写读 &#xff08;三&#xff09;读写PCD文件 写 首先&#xff0c;创建一个名为pcd_write.cpp的文件&#xff0c;并在其中写入以下代码&#xff1a; #include <iostream> #include <pcl/io/pcd_io.h> #include &…

【项目实战】大文件断点续传,搞起

今天给大家分享的又是一篇实战文章&#xff0c;也是最近私活里遇到的&#xff0c;万能的互联网给了我办法&#xff0c;分享一下。 背景 最近接到一个新的需求&#xff0c;需要上传2G左右的视频文件&#xff0c;用测试环境的OSS试了一下&#xff0c;上传需要十几分钟&#xff…

Session

什么是Session&#xff1f; 服务器会给每个用户&#xff08;浏览器&#xff09;创建一个Session对象。一个Session独占一个浏览器&#xff0c;只要浏览器没有关闭&#xff0c;Session就一直存在。用户登陆后&#xff0c;整个网站都可以访问&#xff01;&#xff08;保存用户的…

掌握imgproc组件:opencv-直方图与匹配

直方图与匹配 1. 图像直方图概述2.直方图的计算与绘制2.1 计算直方图&#xff1a;calcHist()函数2.2 找寻最值&#xff1a;minMAxLoc()函数2.3 示例程序&#xff1a;绘制H-S直方图 3.直方图对比3.1 对比直方图&#xff1a;compareHist()函数3.2 示例程序&#xff1a;直方图对比…

Dubbo接口级服务发现-数据结构

目录 Dubbo服务治理易用性的原理&#xff1a; URL地址数据划分&#xff1a; Dubbo接口级服务发现---易用性的代价 Proposal&#xff0c;适应云原生、更大规模集群的服务发现类型。 Dubbo3应用级服务发现---基本原理 Dubbo负载均衡机制 常规负载均衡算法 负载均衡策略&am…

leetcode526. 优美的排列(回溯算法-java)

优美的排列 leetcode526. 优美的排列题目描述接替思路代码演示: 动态规划专题 leetcode526. 优美的排列 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/beautiful-arrangement 题目描述 假设有从 1 到 n 的 n 个整数。用…

【Python 随练】判断一个5位数是否为回文数

题目&#xff1a; 一个 5 位数&#xff0c;判断它是不是回文数。即 12321 是回文数 &#xff0c;个位与万位相同&#xff0c;十位与千位相同。 简介&#xff1a; 在本篇博客中&#xff0c;我们将解决一个编程问题&#xff1a;判断一个5位数是否为回文数。回文数是指从左到右…

数字IC前端学习笔记:近期最少使用(LRU)算法

相关文章 数字IC前端学习笔记&#xff1a;LSFR&#xff08;线性反馈移位寄存器&#xff09; 数字IC前端学习笔记&#xff1a;跨时钟域信号同步 数字IC前端学习笔记&#xff1a;信号同步和边沿检测 数字IC前端学习笔记&#xff1a;锁存器Latch的综合 数字IC前端学习笔记&am…

Java新特性-Functon接口

Java新特性-Functon接口 ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ Spring专栏&#x1f449;https://blog.csdn.net/weixin_53580595/category_12279588.html Sprin…

使用CRM系统如何让你的企业受益

随着市场的竞争日益加剧&#xff0c;企业需要更好地管理客户关系和提高销售。为此&#xff0c;很多企业已经开始使用CRM系统。CRM系统是一种管理客户关系的工具&#xff0c;可以帮助企业更好地了解客户需求&#xff0c;提高销售效率&#xff0c;提高客户满意度和忠诚度等。在这…

【ARM AMBA APB 入门 2 -- Debug APB总线介绍】

文章目录 1.1 DEBUG APB 介绍1.1.1 Debug APB interface 1.2 Debug APB 与 APB 的区别 1.1 DEBUG APB 介绍 ARM Debug APB是一种用于调试ARM处理器的总线协议。它是一种简化的、低功耗的调试接口&#xff0c;用于与处理器内部的调试逻辑进行通信。 ARM Debug APB具有以下特点…

使用Py2neo构建知识图谱(概念与实现)

知识图谱是一种用于描述实体之间关系的图形化知识表示方法&#xff0c;它将实体、属性和关系组织成一个大型的、半结构化的知识库。知识图谱的应用非常广泛&#xff0c;包括语义搜索、智能问答、个性化推荐、内容分发等领域。 知识图谱的构建方法有很多种&#xff0c;其中比较…

基于SpringBoot和Vue的医疗设备管理系统的设计与实现(源码+文档+报告)

伴随着网络技术的发展&#xff0c;网络巨头们也在各自的行业中展开了激烈的竞争。网络技术已经渗透到了社会的各个角落&#xff0c;移动支付、远程医疗和健康管理等多种网络技术的普及也日益广泛。同时&#xff0c;网络产业的崛起也极大地影响了传统产业。对医疗设备管理系统的…

Axure设计之动态柱状图教程(中继器)

中继器作为复杂的元件&#xff0c;通常被用来制作“高保真”的动态原型&#xff0c;以达到良好的视觉效果和交互效果。本文将教大家通过AxureRP9工具如何使用中继器设计动态柱状图表。 一、案例效果 下载地址&#xff1a; https://download.csdn.net/download/u010709330/8797…

多元分类预测 | Matlab鹈鹕算法(POA)优化混合核极限学习机(HKELM)分类预测,多特征输入模型,POA-HKELM分类预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab鹈鹕算法(POA)优化混合核极限学习机(HKELM)分类预测,多特征输入模型,POA-HKELM分类预测 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab…

QT5.12安卓环境的搭建(转载保存留档查看)

1. QT环境搭建 Qt 5.12.6安装的时候 添加 “Android ARM64-v8a”&#xff0c;也可以添加 “Android ARMv7” 。 &#xff08;其它为搭建qgc时需要添加的&#xff09; 2. Android 环境搭建 QT官方的指导&#xff1a; Qt 5.12 Getting Started with Qt for Android Qt 5.15 …

C语言-函数栈帧(每次调用函数,开辟函数的大概流程)

思路&#xff1a; emm&#xff0c;有点懵&#xff0c;这一块&#xff0c;只知道个大概&#xff0c;如果后期我深挖的话&#xff0c;我再回头来补充上图括号的位置&#xff0c;便是每次创建&#xff0c;调用函数的时候&#xff0c;所产生的函数栈帧&#xff0c;也可以理解为每次…

(五)Qt 动态手势识别“左右滑动”以及实现翻页效果

系列文章目录 通过Qt实现手势识别控制软件操作相关系列技术方案 &#xff08;一&#xff09;Qt 将某控件、图案绘制在最前面的方法&#xff0c;通过QGraphicsScene模块实现 &#xff08;二&#xff09;Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方&#xff0c;实现圆…