ElasticSearch从入门到精通:常用操作

2023-10-26

hello,大家好,我是 Jackpop,硕士毕业于哈尔滨工业大学,曾在华为、阿里等大厂工作,如果你对升学、就业、技术提升等有疑惑,不妨交个朋友:

我是Jackpop,我们交个朋友吧!

在前面这一部分,我已经解释了ElasticSearch的基础知识及其工作原理。

在这一部分,我们将学习如何在ElasticSearch中执行搜索。

CRUD

在开发过程中,主要都在围绕着数据的CRUD进行处理,具体来说就是:

  • C – Create
  • R – Retrieve or Read
  • U – Update
  • D – Delete

下表将每个CRUD命令与其各自的ElasticSearch HTTP / REST命令进行了一一对应,

CRUD command HTTP/REST command
Create PUT or POST
Read GET
Update PUT or POST
Delete DELETE

上一篇文章中,我们学习了Kibana,接下来,就切换到Kibana的控制台。

  1. 创建索引

通过如下命令,创建一个flight索引:

PUT /flight
GET /_cluster/health

请注意,现在群集的运行状况已从绿色变为黄色。 发生这种情况是因为我们仅运行一个Elasticsearch实例。 单节点群集具有完整的功能,但是无法将数据复制到其他节点以提供弹性。 副本分片必须有其他可用节点,群集状态才能变为绿色。 如果群集状态为红色,则标识某些数据不可用。

为了解决这个问题,您需要安装另一个同样的Elasticsearch,并在elasticsearch.yml中更改node.name; 两个实例中的cluster.name必须保持相同(默认为elasticsearch)。

另一种方法是在命令行上将配置参数传递给Elasticsearch。

bin/elasticsearch -Enode.name=node-2 -Epath.data=./node-2/data -Epath.logs=./node-2/logs
GET /_cat/indices?v
 
health status index  uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   flight w696u4y3SYWuGW--8VzW6Q   1   1          0            0       208b           208b
  1. 创建文档

下面,向我们的索引添加一些示例数据:

PUT /flight/_doc/1 
{
  "Icao":"A0835D",
  "Alt":2400,
  "Lat":39.984322,
  "Long":-82.925616
}

也可以使用curl命令:

curl -X PUT "localhost:9200/flight/_doc/1?pretty" -H 'Content-Type: application/json' -d'
{
  "Icao":"A0835D",
  "Alt":2400,
  "Lat":39.984322,
  "Long":-82.925616
}'

在这种情况下,ElasticSearch将为我们的文档生成一个自动ID。 这是ElasticSearch返回的结果:

Content-Type对于查询成功至关重要, 我们创建了一个ID = 1的新排期。我们也可以使用POST代替PUT,但是在这种情况下,我们无法传递ID。

在这种情况下,ElasticSearch将为我们的文档生成一个自动ID。

下面是ElasticSearch返回的结果:

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "flight",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "Icao" : "A0835D",
          "Alt" : 2400,
          "Lat" : 39.984322,
          "Long" : -82.925616
        }
      }
    ]
  }
}

结果文档存储在键值_source内。

  1. 删除文档

如果你知道文档索引,可以直接通过索引进行删除:

DELETE /flight/_doc/1
  1. 删除索引

通过下方命令删除索引:

DELETE /flight
  1. 批量导入数据

我们的方案是处理航班数据,理想情况下,这些数据是从多个传感器(雷达)实时获得的,但是由于这很难实现。

因此,我们将使用可从此处下载的批量历史飞行数据。

在下载批处理文件的目录中,发送以下命令(每个.json文件):

curl -H "Content-Type: application/x-ndjson" -XPOST http://localhost:9200/flights/_bulk --data-binary "@2016-07-01-1300Z.json"

请注意,内容类型是application/x-ndjson,而不是application/x-json。

另外,请注意,我们将数据表示为二进制以便保留换行符。

磁瓦ElasticSearch需要json文档满足特定格式:

{"index":{"_id":4800770}}
{"Rcvr":1,"HasSig":false,"Icao":"494102", "Bad":false,"Reg":"CS-PHB", ...}
...

这意味着你必须将每个下载的.json文件转换为上述格式。

如果你不想花时间手动修改.json文档,则在下一篇文章中,我们将开发一个Java程序来解析它们,并使用ElasticSearch的REST API将文件插入ElasticSearch中。

  1. 搜索查询

ElasticSearch是一款搜索相关的工具,它允许你进行符合条件的搜索查询。

GET /flight/_search?pretty
{ "query": {
     "match_all" : {
     }
   }
}

上面的搜索查询匹配索引对应的所有文档。 也可以这样简化:

GET /flight/_search

下面是根据给定字段Icao进行查询:

GET /flight/_search?pretty 
{ "query": {
     "match" : {
      "Icao" : "A0835D"
     }
   }
}

也可以用嵌入URL进行搜索:

GET /flight/_search?q=Icao:A0835D

也可以这样写:

GET /flight/_search?pretty 
{ "query": {
     "query_string": {
      "query": "Icao:A0835D"
     }
   }
}

除了“match”和“query_string”以外,还可以使用“term”。 使用“ term”表示精确匹配。

GET /flight/_search?pretty 
{ "query": {
     "term": {
      "Mil": true
     }
   }
}

你也可以使用“term”来搜索值数组。

除此之外,还可以使用通配符“wildcard”进行搜索,包括*/?。

GET /flight/_search?pretty 
{ "query": {
     "wildcard": {
      "Call": "NJ*"
     }
   }
}
  1. 更新文档

如果你知道索引的ID,可以通过_updateAPI进行更新。

POST /flight/_update/4800770
{
  "doc": {
    "Mil": true
  }
}

使用上述命令,我们也可以将新字段添加到文档中。

附带说明一下,ElasticSearch文档是不可变的!

因此,当我们请求更新文档时,ElasticSearch会在后台进行操作,它检索文档,更改其字段并为具有相同ID的文档重新索引,从而对它进行替换。

可以使用脚本发送更复杂的查询,

POST /flight/_update/4800770
{
  "script": {
    "source": "ctx._source.FlightsCount++" 
  }
}

ctx表示上下文。

还有许多其他更新文档的方法,例如,upserts,即根据文件是否已存在有条件地更新或插入文件。

POST /flight/_update/4800771
{
  "script": {
    "source": "ctx._source.FlightsCount++" 
  },
  "upsert": {
    "Rcvr":1,
    "HasSig":false,
    "Icao":"AE4839",
    ... 
  },
}
  1. 删除文档

使用_delete_by_query API可以删除文档:

POST /flight/_delete_by_query
{
  "query": {
    "match_all": {}
  }
}
  1. 批量查询

批量API可帮助我们通过一个查询对许多文档执行同样的操作。

该API包含4个动作:索引,创建,更新,删除:

POST /_bulk
{ "index": { "_index" : "flight", "_id": 10519389 } }
{ "Rcvr":1,"HasSig":true,"Sig":0,"Icao":"A0835D","Bad":false, ... }
{ "create": { "_index" : "flight", "_id": 4800770 } }
{"Rcvr":1,"HasSig":false,"Icao":"494102","Bad":false, ... }
{ "update": { "_index" : "flight", "_id": 4800770 } }
{ "doc": {"Mil": true } }
{ "delete": { "_index" : "flight", "_id": 4800770 } }

索引和创建操作之间的区别如下:如果文档已经存在,则创建将引发错误,而索引将替换文档。

如果批量查询要针对相同的索引运行,那么我们可以像这样简化查询:

POST /flight/_bulk
{ "index": { "_id": 10519389 } }
{ "Rcvr":1,"HasSig":true,"Sig":0,"Icao":"A0835D","Bad":false, ... }
{ "create": { "_id": 4800770 } }
{"Rcvr":1,"HasSig":false,"Icao":"494102","Bad":false, ... }
{ "update": { "_id": 4800770 } }
{ "doc": {"Mil": true } }
{ "delete": { "_id": 4800770 } }
  1. 映射

ElasticSearch是如何映射数据的呢?

动态映射意味着没有明确定义映射,或者至少没有为某些字段定义。

ElasticSearch是通过检查文档字段的值类型来完成的。

要查看数据映射,请在Kibana中执行以下内容:

GET /flight/_mapping

我们也可以通过下方命令手动添加映射关系,

PUT /flight/_mapping 
{
   "properties": {
     "location": {
       "type": "geo_point"
     }
   }
}

请注意,一旦创建了字段映射,就不能对其进行修改。 唯一的方法是删除并重新创建索引。

在下面的示例中,我们手动创建了各种禁用动态映射的映射。

PUT /flight/_mapping
{
    "dynamic": false,
    "properties": {
      "Rcvr": {
        "type": "integer"
      },
      "Icao": {
        "type": "text"
      },
      ...
      "location": {
        "type": "geo_point"
      }
   }
}

如果你更新了映射,请在禁用动态映射的情况下发出以下查询来更新ElasticSearch,

POST /flight/_update_by_query?conflicts_proceed

在这部分,我重点介绍了如何使用ElasticSearch的常用功能。

在下一一部分中,我们将学习如何在将json文件转换为ElasticSearch的批量API所需的格式之后,以及通过使用JSON库解析json文件,并将批处理json文件导入到ElasticSearch中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ElasticSearch从入门到精通:常用操作 的相关文章

随机推荐

  • k8s集群搭建(二进制方式)

    k8s集群搭建 二进制方式 1 安装要求 2 准备环境 3 操作系统初始化配置 4 部署 Etcd 集群 4 1 准备 cfssl 证书生成工具 4 2 生成 Etcd 证书 4 3 从 Github 下载二进制文件 4 4 部署 Etcd
  • 编码套路的实战演练

    1 写一份自己的简历 把自己所有的相关技能都罗列出来 然后把那些在100年后还用得到的标出来 给每个技能打分 满分为10分 2 罗列出你所景仰的程序员 尽量包括那些与你一起工作的人 因为你会在工作中从他们身上获取一些技能 记录下他们身上的1
  • 干货

    源于频率主义学派的极大似然估计 Maximum Likelihood Estimation 简称MLE 是根据数据采样来估计概率分布参数的经典方法 在机器学习的对数几率回归 贝叶斯分类器等中有广泛的应用 1 极大似然估计法 设总体的概率密度
  • [23最新版新手向]Linux系统下安装MMDetection

    前言 MMDetection 是商汤和港中文大学针对目标检测任务推出的一个开源项目 它基于Pytorch 实现了大量的目标检测算法 例如 fast rcnn faster rcnn detr 等算法 一 安装 UBuntu20 04 及创建
  • C语言竞赛小题分析

    问题1 单身狗的愤怒 题目描述 罩得住学长是工作室最帅的帅哥 所以集训的学妹都喜欢罩得住学长 但是工作室的其他学长很不爽 现在挑5个女生出来 如果女生喜欢罩得住学长就为1 不喜欢就是0 喜欢的人越多 学长们的仇恨值越高 请求出学长们的愤怒值
  • Jetson nano中使用tensorrt推理yolov5

    克隆下载yolov5项目 准备yolov5项目 从仓库下载5 5 0版本 git clone b v5 0 https github com ultralytics yolov5 git 下载权重地址 https github com ul
  • 关于Commit message代码提交

    Commit message代码提交规范 目录 一 简述 二 Commit message格式 命令行方式 1 Header 2 Body 3 Footer 4 Revert 三 工具 1 Commitizen 2 validate com
  • c++关键字之volatile

    1 volatile 直接存取原始内存地址 volatile 求助编辑百科名片 volatile 就象大家更熟悉的const一样 volatile是一个类型修饰符 type specifier 它是被设计用来修饰被不同线程访问和修改的变量
  • Maven中央仓库地址

    Maven 中央仓库地址有一下几个 可能这里不全 但一定能够使用 1 http mvnrepository com 属于美化版本 国外网站 在国内可能下载比较慢 2 http repo1 maven org maven2 属于基本版本 查找
  • nodejs之文件下载

    request模块实现下载 app js var express require express var app express 创建express实例 var routes require routes routes js 吧路由引入 代
  • Swin-Transformer-Object-Detection环境搭建训练流程及问题

    一 背景 Swin Transformer Swin代表移位窗口shifted window 可以作为计算机视觉的通用backbone 它的github网址是Swin Transformer 然后它有好几种应用 Getting Starte
  • 古风排版 c语言

    中国的古人写文字 是从右向左竖向排版的 本题就请你编写程序 把一段文字按古风排版 输入格式 输入在第一行给出一个正整数NN lt 100 lt 100 是每一列的字符数 第二行给出一个长度不超过1000的非空字符串 以回车结束 输出格式 按
  • flutter如何实现点击事件

    在Android中 您可以通过调用方法setOnClickListener将OnClick绑定到按钮等view上 在Flutter中 有两种方法 1 如果Widget支持事件监听 则可以将一个函数传递给它并进行处理 例如 RaisedBut
  • 华硕飞行堡垒进入bios

    1 关机重启 在重启时一直按住F2进入如下页面 2 按下F7 进入如下页面 3 通过移动键盘右键 gt 键 使界面来到Advanced 4 通过移动键盘下键 移动到Advanced中的SVM Mode 通过Enter键进行下拉选取 入下图小
  • unity知识学习(一)巨型太阳---组件Lens Flare的运用

    unity关于在天空设置一个巨型太阳 组件Lens Flare的运用 介绍 unity版本 如何制作巨型太阳 最基本的操作 如何制作巨型太阳 关键操作 我制作好的巨型太阳 介绍 本次知识前面比较简单 因此将基本操作和关键点操作分开 读者可方
  • CSS 实现文字渐变色

    1 background 属性设置渐变色 1 源码示例 text background image linear gradient to right pink purple color transparent webkit backgrou
  • eclipse New Server Runtime Environment 列表中没有 Apache Tomcat

    该问题主要原因可能是 Eclipse插件不全引起 按以下步骤安排插件即可 1 点击工具栏上的Help gt Install New Software 2在弹出的对话框的 Work with 输入 http download eclipse
  • 检查你的电脑是否支持硬件虚拟化技术

    有时候需要知道电脑是否支持硬件虚拟化技术 这种情况可能需要在在windown7系统上装MacOS 系统 通过使虚拟机 在虚拟机上安装出现如下问题是 首先 在更改你的BIOS设置之前 检测你的处理器是否支持硬件虚拟化技术 下载 securab
  • 等和子数组最小和(Java)

    题目描述 给定一个数组nums 将元素分为若干个组 使得每组和相等 求出满足条件的所有分组中 组内元素和的最小值 输入描述 第一行输入 m 接着输入m个数 表示此数组nums 数据范围 1 lt m lt 50 1 lt nums i lt
  • ElasticSearch从入门到精通:常用操作

    hello 大家好 我是 Jackpop 硕士毕业于哈尔滨工业大学 曾在华为 阿里等大厂工作 如果你对升学 就业 技术提升等有疑惑 不妨交个朋友 我是Jackpop 我们交个朋友吧 在前面这一部分 我已经解释了ElasticSearch的基