实用篇-ES-DSL操作文档

一、mapping属性

mapping属性的官方文档: https://elastic.co/guide/en/elasticsearch/reference/current/index.html

下面的表格是介绍elasticsearch中的各个概念以及含义,看的时候重点看第二、三列,第一列是为了让你更理解第二列的意思,所以在第一列拿MySQL的概念来做匹配。例如elasticsearch的Index表示索引也就是文档的集合,就相当于MySQL的Table(也就是表)

MySQL

Elasticsearch

说明

Table

Index

索引(index),就是文档的集合,类似数据库的表(table)

Row

Document

文档(Document),就是一条条的数据,类似数据库中的行(Row)。这里的文档都是JSON格式

Column

Field

字段(Field),就是JSON文档中的字段,类似数据库中的列(Column)

Schema

Mapping

Mapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema)

SQL

DSL

DSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD

mapping是对索引库中文档(es中的文档是json风格)的约束,常见的mapping属性包括如下

  • type: 字段数据类型 
    • 字符串(分两种): text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址等不可分词的词语)
    • 数值: long、integer、short、byte、double、float
    • 布尔: boolean
    • 日期: date
    • 对象:object
  • index: 是否创建倒排索引,默认为true(也就是可参与分词搜索),改成false的话,别人就搜索不到你
  • analyzer: 分词器,当字段类型是text时必须指定分词器。如果字段类型是keyword,那么不需要指定分词器
  • properties: 子字段,也就是属性和子属性

二、创建索引库

ES中通过Restful请求操作索引库、文档。请求内容用DSL语句来表示。创建索引库和mapping的DSL语法如下

PUT /索引库名称
{
  "mappings": {//映射
    "properties": {//字段
      "字段名":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "字段名2":{
        "type": "keyword",
        "index": false //false表示这个字段不参与搜索,该字段不会创建为倒排索引,false不加双引号
      },
      "字段名3":{
        "properties": {//这个就是子字段
          "子字段": {
            "type": "keyword"
          }
        }
      },
      // ...略
    }
  }
}

具体操作: 首先保证你已经做好了 '实用篇-ES-环境搭建' ,然后开始下面的操作

systemctl start docker # 启动docker服务
docker restart es #启动elasticsearch容器
docker restart kibana #启动kibana容器

第一步: 浏览器访问 http://192.168.229.129:5601 。输入如下,注意把注释删掉

# 创建索引库,名字自定义,例如keke
PUT /keke
{
  "mappings": {
    
    "properties": {
      "xxinfo": {
        "type": "text", //文本类型,可以被分词器分词
        "analyzer": "ik_smart" //必须指定分词器
      },
      "xxemail": {
        "type": "keyword", //精确值类型,不可被分词器分词,本身就是最简的
        "index": false //不参与搜索,用户不能通过搜索搜到xxemail字段
      },
      "name": {
        "type": "object", //对象类型
        "properties": { //父字段
          "firstName": { //子字段
            "type": "keyword", //精确值类型,不可被分词器分词,本身就是最简的
            "index": true //参与搜索,用户通过可搜索到firstName字段
          },
          "lastName": { //子字段
            "type": "keyword", //精确值类型,不可被分词器分词,本身就是最简的
            "index": true //参与搜索,用户通过可搜索到lastName字段
          }
        }
      }
    }
  }
}

 

三、查询、修改、删除索引库

1. 查询索引库

查询索引库语法

GET /索引库名

2. 修改索引库

往索引库添加新字段,注意: 索引库是无法被修改的,但是可以添加新字段(不能和已有的重复,否则报错)

PUT /索引库名/_mapping
{
  "properties": {
    "新字段名":{
      "type": "integer"
    }
  }
}

//例如如下
PUT /keke/_mapping
{
  "properties": {
    "age": {
      "type": "integer"
    }
  }
}

3. 删除索引库

DELETE /索引库名

四、新增、查询、删除文档

具体操作: 首先保证你已经做好了 '实用篇-ES-环境搭建' ,然后开始下面的操作。并且已经创建了名为keke的索引库

systemctl start docker # 启动docker服务
docker restart es #启动elasticsearch容器
docker restart kibana #启动kibana容器

 1. 新增文档

新增文档的DSL语法,其实就是告诉kibana,我们要把文档添加到es的哪个索引库,如果省略文档id的话,es会默认随机生成一个,建议自己指定文档id

POST /索引库名/_doc/文档id
{
    "字段1": "值1",
    "字段2": "值2",
    "字段3": {
        "子属性1": "值3",
        "子属性2": "值4"
    },
    // ...
}
POST /keke/_doc/1
{
  "info":"keke-学微服务",
  "email": "163@keke",
  "name":{
    "firstName":"张",
    "lastName":"三"
  }
}

2. 查询文档

GET /索引库名/_doc/文档id

3. 删除文档

 DELETE/索引库名/_doc/文档id 

五、修改文档

方式一: 全量修改,会删除旧文档,添加新文档。修改文档的DSL语法,如下

注意: 这种操作是直接用新值覆盖掉旧的,如果只put一个字段那么其它字段就没了,所以,你不想修改的字段也要原样写出来,不然就没了

注意: 如果你写的文档id或字段不存在的话,本来是修改操作,结果就变成新增操作

PUT /索引库名/_doc/文档id
{
    "字段1": "值1",
    "字段2": "值2",
    // ... 略
}
PUT /keke/_doc/1
{
  "xxinfo":"keke-学三更博客项目",
  "email": "123@keke.cn",
  "name":{
    "firstName":";李",
    "lastName":"四"
  }
}

方式二: 增量修改。修改指定字段的值

注意: 如果你写的文档id或字段不存在的话,本来是修改操作,结果就变成新增操作

POST /索引库名/_update/文档id
{
    "doc": {
         "要修改的字段名": "新的值",
    }
}
POST /keke/_update/1
{
  "doc": {
    "firstName": "theshy or faker"
  }
}

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

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

相关文章

论文精读 MediaPipe BlazeFace

BlazeFace:Sub-millisecond Neural Face Detection on Mobile GPUs BlazeFace:基于移动GPUs的亚毫秒神经人脸检测 论文地址:arxiv.org/pdf/1907.05047.pdf 源码地址:GitHub - tkat0/PyTorch_BlazeFace: Unofficial PyTorch implementation…

无需数据库服务器部署脚本,全能型开源数据库监控平台lepus

Lepus 是一款开源的数据库监控平台,目前已经支持 MySQL、Oracle、SQLserver、MongoDB、Redis 等数据库的基本监控和告警。 Lepus 在监控数据库时,无需在每台数据库服务器上部署脚本或 Agent,只需要在数据库中创建授权账号后,即可…

Python-Python高阶技巧:HTTP协议、静态Web服务器程序开发、循环接收客户端的连接请求

版本说明 当前版本号[20231114]。 版本修改说明20231114初版 目录 文章目录 版本说明目录HTTP协议1、网址1.1 网址的概念1.2 URL的组成1.3 知识要点 2、HTTP协议的介绍2.1 HTTP协议的概念及作用2.2 HTTP协议的概念及作用2.3 浏览器访问Web服务器的过程 3、HTTP请求报文3.1 H…

算法萌新闯力扣:x的平方根

力扣热题:69.x的平方根 开篇 这是一道练习二分查找的题目,简单但也有一些细节需要注意,如判断条件、溢出等。 题目链接:69.x的平方根 题目描述 代码思路 1.一开始使用暴力解,发现超时了,看了标签,原来又…

thinkphp6(TP6)访问控制器报404(Nginx)

起因: 安装thinphp6后,发现无法访问控制器,直接通过URL访问,就报错404。 错误原因: Nginx不支持URL的 PathInfo。 解决方法: 配置伪静态。 伪静态代码: location / {if (!-e $request_filen…

MyBatis源码分析

MyBatis源码分析 MyBatis是常用的持久层框架,帮助我们减少了很多的访问数据库的代码。这次我们就来看看MyBatis是怎么做到这些的?看看它里面用到了哪些值得我们借鉴的技术。 一、示例程序 为了方便后续在本地进行debug调试,首先准备一个示…

【Hello Algorithm】单调栈(未完待续)

单调栈解决的问题 我们单调栈的提出主要是为了解决这么一个问题 现在给我们一个数组 现在要求你建立一张表 这张表中能够查询到两个信息 这两个信息分别是 当前数字左边小于该数字并且下标位置最相近的下标当前数字右边小于该数字并且下标位置最相近的下标 同理 大于也可以…

机器学习入门案例(3)之使用决策树预测是否适合打网球

大家好,我是邵奈一,一个不务正业的程序猿、正儿八经的斜杠青年。 1、世人称我为:被代码耽误的诗人、没天赋的书法家、五音不全的歌手、专业跑龙套演员、不合格的运动员… 2、这几年,我整理了很多IT技术相关的教程给大家&#xff0…

如何解决网页中的pdf文件无法下载?pdf打印显示空白怎么办?

问题描述 偶然间,遇到这样一个问题,一个网页上的附件pdf想要下载打印下来,奈何尝试多种办法都不能将其下载下载,点击打印出现的也是一片空白 百度搜索了一些解决方案都不太行,主要解决方案如:https://zh…

【万字长文】Python 日志记录器logging 百科全书 之 日志过滤

Python 日志记录器logging 百科全书 之 日志过滤 前言 在Python的logging模块中,日志过滤器(Filter)用于提供更细粒度的日志控制。通过过滤器,我们可以决定哪些日志记录应该被输出,哪些应该被忽略。这对于复杂的应用…

【每日一题】—— D. Epic Transformation(Codeforces Round 710 (Div. 3))(找规律+贪心)

🌏博客主页:PH_modest的博客主页 🚩当前专栏:每日一题 💌其他专栏: 🔴 每日反刍 🟡 C跬步积累 🟢 C语言跬步积累 🌈座右铭:广积粮,缓称…

vue离线地图(瓦片)

最近公司要弄一个这样的离线地图,要求在图上打点画线之类的。折腾了几天,学习了三种方式: 1.拿到各省市区的经纬度json,通过echarts来制作,再套一个卫星图的地图背景 2.下载地图瓦片,再通过百度/高德的离线…

image J 对Western blot 条带进行灰度分析 量化分析

用ImageJ对条带进行定量分析 | Public Library of Bioinformatics (plob.org) 3分钟Get!大牛教你用 image J 对Western blot 条带进行灰度分析! - 哔哩哔哩 (bilibili.com) 科研人员做的western blot实验一般需要对其结果扫描后进行灰度分析&#xff0…

【Qt之QWizard】使用2,示例分析

效果图 根据首页的选择不同&#xff0c;进入不同的选项。 以下是代码。 示例 .h #ifndef LICENSEWIZARD_H #define LICENSEWIZARD_H#include <QWizard>QT_BEGIN_NAMESPACE class QCheckBox; class QLabel; class QLineEdit; class QRadioButton; QT_END_NAMESPACEcla…

vue请求代理查看真实地址

查看真实地址方式&#xff1a; 通过配置vue.config.js文件&#xff0c;直接在请求头输出完整地址&#xff1a; /api/: { changeOrigin: true, target: process.env.VUE_APP_PLATFORM_URL, logLevel: debug, // 在终端输出 onProxyRes(proxyR…

请求头,响应头

目录 常见的请求方式 GET/POST HEAD&#xff08;报文首部&#xff0c;验证URI有效性&#xff09; PUT/DELETE(报文文件) OPTIONS&#xff08;查询URI支持的HTTP方法&#xff09; Connection: keep-alive TCP 就会一直保持连接。 Cache-Control public&#xff1a;响应…

数据银行:安全保障的重要一环

随着信息技术的快速发展&#xff0c;数据银行已经成为了我们日常生活中不可或缺的一部分。它存储了我们的个人信息、财务数据、医疗记录等重要信息&#xff0c;这些信息对于我们的生活和工作至关重要。然而&#xff0c;由于数据的安全性备受关注&#xff0c;因此&#xff0c;对…

【星海出品】SDN neutron (四) 流分析

Neutron框架之流分析 1.控制端neutron-server通过wsgi接收北向REST API请求&#xff0c;neutron-plugin通过rpc与设备端进行南向通信。 2.设备端agent则向上通过rpc与控制端进行通信&#xff0c;向下则直接在本地对网络设备进行配置。 3.Neutron-agent的实现很多&#xff0c;彼…

容斥dp,二项式反演

前言 由于水平有限&#xff0c;这篇文章比较难懂&#xff0c;并且也有很多不够透彻的地方&#xff0c;如果您有任何的看法&#xff0c;非常感谢您私信指导。 容斥dp 用dp的方法来描述容斥&#xff0c;大概的想法是&#xff0c;把容斥系数分到每一步里去乘。 通常当你有容斥…

本田发布全新CB1000 Hornet,是杜卡迪街霸劈了腿还是Z1000红杏出墙?

米兰车展上&#xff0c;本田带来了全新的大黄蜂CB1000 Hornet&#xff0c;外观方面抛弃了之前的本田推出的Neo Sports Caf风格&#xff0c;新款的外观看起来要更加战斗一点。不过新的这个前脸改的&#xff0c;我只能说是杜卡迪街霸劈了腿还是Z1000红杏出墙&#xff1f;外观方面…