Elasticsearch 之 数据索引

2023-11-14

对于提供全文检索的工具来说,索引时一个关键的过程——只有通过索引操作,才能对数据进行分析存储、创建倒排索引,从而让使用者查询到相关的信息。

本篇就ES的数据索引操作相关的内容展开:

更多内容参考:Elasticsearch资料汇总

索引操作

最简单的用法就是指定索引操作的index索引、type类型、ID(需要区分动词的索引和名次的索引),参考下面的例子:

$ curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}'

这样就在索引twitter中的tweet类型中存储了id为1的数据。

索引操作的结果为:

{
    "_shards" : {
        "total" : 10,
        "failed" : 0,
        "successful" : 10
    },
    "_index" : "twitter",
    "_type" : "tweet",
    "_id" : "1",
    "_version" : 1,
    "created" : true
}

上面的_shards中描述了分片相关的信息,即当前一共有10个分片(5个主分片,5个副分片,并且均可用);以及index、type、id、version相关的信息。

自动创建索引

如果上面执行操作前,ES中没有twitter这个索引,那么默认会直接创建这个索引;并且type字段也会自动创建。也就是说,ES并不需要像传统的数据库事先定义表的结构

每个索引中的类型都有一个mapping映射,这个映射是动态生成的,因此当增加新的字段时,会自动增加mapping的设置。

通过在配置文件中设置action.auto_create_index为false,可以关闭自动创建index这个功能。

自动创建索引功能,也可以设置黑名单或者白名单,比如:

设置action.auto_create_index为 +aaa*,-bbb*,'+'号意味着允许创建aaa开头的索引,'-'号意味着不允许创建bbb开头的索引

关于版本号

版本号维护了一个文档的状态,我们只会针对最高版本号的文档进行操作。

文档号不仅可以在文档中进行存储,也可以在外部维护版本号,具体的参考官方文档吧....

操作类型op_type

ES通过参数op_type提供“缺少即加入”的功能,即如果ES中没有该文档,就进行索引;如果有了,则报错返回。

如果已经存在id为1的文档,则会报错,直接使用_create API,效果一样:

自动创建ID:

按照最上面的例子来说,ES会把我们指定的文档id做为ID。如果不指定ID,那么就会随机分配一个:

路由routing

ES是通过路由来进行查询的,一般一个查询会经过下面的过程:

1 节点接收请求,广播给每个分片

2 分片接收请求,进行计算,返回结果

3 合并消息,返回

如果我们设置了路由信息,就相当于告诉了ES,该去哪个分片查询数据,也就取消了广播合并这个过程,从而提高了查询的效率。使用方法:

$ curl -XPOST 'http://localhost:9200/twitter/tweet?routing=kimchy' -d '{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}'

路由是通过哈希来实现的,如果我们在索引的时候直接指定routing的值,就会按照这个值计算哈希值,分配分片;如果不指定,就会根据ID来分配。由于一般情况下ID都是随机生成的,这样就可以保证默认情况下分片的数据负载是相同的。如果我们需要在特定的分片保存特定的内容,就可以使用路由指定分片。不过这样做,日后随着数据量的增加,也可能会导致某个分片压力过大。

另外,也可以在定义mapping的时候,直接设置routing的相关值。这样这个类型中的数据如果不指定routing的值,默认就会使用mapping中定义的那个路由值。

parent设置父子关系

ES中可能会涉及到一些文档的从属关系,使用parent参数,可以设置这种关系:

$ curl -XPUT localhost:9200/blogs/blog_tag/1122?parent=1111 -d '{
    "tag" : "something"
}'

_timestamp设置时间戳

时间戳字段可以也可以在索引操作时指定:

$ curl -XPUT localhost:9200/twitter/tweet/1?timestamp=2009-11-15T14%3A12%3A12 -d '{
    "user" : "kimchy",
    "message" : "trying out Elasticsearch"
}'

如果没有手动指定时间戳,_source中也不存在时间戳,就会设置为索引指定的时间。不过需要指定mapping中的_timestamp设置为enable

PUT my_index
{
  "mappings": {
    "my_type": {
      "_timestamp": { 
        "enabled": true
      }
    }
  }
}

ttl文档过期

ES中也可以设置文档自动过期,过期是设置一个正的时间间隔,然后以_timestamp为基准,如果超时,就会自动删除。

如果设置为时间戳:

curl -XPUT 'http://localhost:9200/twitter/tweet/1?ttl=86400000' -d '{
    "user": "kimchy",
    "message": "Trying out elasticsearch, so far so good?"
}'

如果设置为日期数学表达式:

curl -XPUT 'http://localhost:9200/twitter/tweet/1?ttl=1d' -d '{
    "user": "kimchy",
    "message": "Trying out elasticsearch, so far so good?"
}'

也可以在JSON字段中指定:

curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
    "_ttl": "1d",
    "user": "kimchy",
    "message": "Trying out elasticsearch, so far so good?"
}'

手动刷新

由于ES并不是一个实时索引搜索的框架,因此数据在索引操作后,需要等1秒钟才能搜索到。这里的搜索是指进行检索操作。如果你使用的是get这种API,就是真正的实时操作了。他们之间的不同是,检索可能还需要进行分析和计算分值相关性排序等操作。

为了在数据索引操作后,马上就能搜索到,也可以手动执行refresh操作。只要在API后面添加refresh=true即可。

这种操作仅推荐在特殊情况下使用,如果在大量所以操作中,每个操作都执行refresh,那是很耗费性能的。

Timeout超时

分片并不是随时可用的,当分片进行备份等操作时,是不能进行索引操作的。因此需要等待分片可用后,再进行操作。这时,就会出现一定的等待时间,如果超过等地时间则返回并抛出错误,这个等待时间可以通过timeout设置:

$ curl -XPUT 'http://localhost:9200/twitter/tweet/1?timeout=5m' -d '{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}'

 

以上便是索引操作相关的知识,还有一些高级的知识,比如分片和版本号详细的用法,由于对ES还是理解的不够透彻,就先不做过多的讲述了,免得错误太多。

如有异议,还请多多指正。

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

Elasticsearch 之 数据索引 的相关文章

  • 【MifareClassicTool】小米NFC手机模拟加密门禁详细教程(Android手机通用)

    mifare官方最新版地址https www icaria de mct releases 3 0 资源名称 MifareClassicTool 资源分类 Android NFC类软件 资源大小 960 5 Kb 资源版本 V2 2 3 准
  • python中chr()函数和ord()函数的用法

    Python内置函数 一 chr 函数 格式 Chr lt 数值表达式 gt 说明 函数返回值类型为String 其数值表达式值取值范围为0 255 以下是 chr 方法的语法 chr i i 可以是10进制也可以是16进制的形式的数字 返
  • 【Matting】MODNet:实时人像抠图模型-笔记

    paper MODNet Real Time Trimap Free Portrait Matting via Objective Decomposition AAAI 2022 github https github com ZHKKKe
  • 无向图染色

    题目描述 给一个无向图染色 可以填红黑两种颜色 必须保证相邻两个节点不能同时为红色 输出有多少种不同的染色方案 输入描述 第 行输入M 图中节点数 N 边数 后续N行格式为 V1V2表示一个V1到V2的边 数据范围 1 lt M lt 15
  • Java中抽象类和接口区别

    简单概括下Java中抽象类和接口直接的区别 可以概括为如下几点 1 一个类可以实现多个接口 但却只能继承最多一个抽象类 2 抽象类可以包含具体的方法 接口的所有方法都是抽象的 3 抽象类可以声明和使用字段 接口则不能 但接口可以创建静态的f
  • CAT1和CAT4的区别

    现今 CAT1的发展势头一直很迅猛 那为什么CAT4不能替代CAT1的地位呢 我们来看下面几点 成本 1 网络建设方面 Cat1可以无缝接入现有LTE网络当中 无需针对基站进行软硬件升级 网络覆盖成本低 2 芯片成本方面 经过系统优化后 模
  • 在vue3项目中使用新版高德地图

    高德开发平台 高德开放平台 高德地图API amap com 1 首先你要注册好账号登录 2 获取key和密钥 自2021年12月02日升级 升级之后所申请的 key 必须配备安全密钥 jscode 一起使用 NPM方式安装和使用 基础版
  • 【VS2019/C++/报错】由于找不到libmysql.dll/由于找不到libssl-1_1-x64.dll,无法继续执行代码

    错误描述 属性页的包含目录和库目录都加了 链接器的lib也加了 但是运行时报错找不到libmysql dll 把libmysql dll文件放到项目文件夹内和系统文件夹C Windows SysWOW64都没用 开始报 找不到libssl
  • android AndroidManifest的category

    CATEGORY ALTERNATIVE 设置这个activity是否可以被认为是用户正在浏览的数据的一个可选择的action CATEGORY APP BROWSER 和ACTION MAIN一起使用 用来启动浏览器应用程序 CATEGO
  • SystemviewV3.3工具使用

    SystemviewV3 3工具使用 工具下载 移植 错误解决方式 使用方法 工具下载 Systemview下载地址 移植 以不带操作系统的移植方式为例 移植源码位于 工程加入以下文件 错误解决方式 keil下多重定义问题 Objects
  • 关于TP5多语言BUG的解决办法(直接上代码)

    按照手册配置 默认语言没有反应 跳转页面之后 也没有检测当前的语言 很尴尬 最大的bug在这里 1 请用下面代码覆盖 thinkPhp library think Lang php 里面的detect 自动检测语言方法 自动侦测设置获取语言
  • jQuery 获取当前节点的html包含当前节点的方法 --$(".test").prop("outerHTML");

    在开发过程中 jQuery html 是获取当前节点下的html代码 并不包含当前节点本身的代码 然后我们有时候确需要 找遍jQuery api文档也没有任何方法可以拿到 看到有的人通过parent html 如果当前元素没有兄弟元素还行
  • Python subplots() 使用说明

    plt subplots 官方教程 link 参数 matplotlib pyplot subplots nrows 1 ncols 1 sharex False sharey False squeeze True subplot kw N
  • 雅可比矩阵和Hessian矩阵

    Jacobian矩阵和Hessian矩阵 1 Jacobian 在向量分析中 雅可比矩阵是一阶偏导数以一定方式排列成的矩阵 其行列式称为雅可比行列式 还有 在代数几何中 代数曲线的雅可比量表示雅可比簇 伴随该曲线的一个代数群 曲线可以嵌入其
  • Linux搭建测试环境详细步骤

    本文讲解如何在Linux CentOS下部署Java Web项目的步骤 环境准备 1 Linux系统 2 JDK 3 Tomcat 4 MySQL 工具下载 可从官网下载 已把安装工具存于百度网盘 链接 https pan baidu co
  • Jmeter:使用代理录制脚本

    目录 前言 介绍下各设置项 前言 当我们想要录制并回放特定应用程序或网站的交互时 使用JMeter的代理是一种常见且有效的方法 通过配置JMeter代理 它可以拦截并记录客户端与目标应用程序之间的HTTP或HTTPS通信 然后生成对应的测试
  • 如何重装Linux系统

    大家都知道我们平常所用的windows系统 可以很方便的重装系统 有U盘安装 还有光盘安装 那么我们在Linux下如何重装系统呢 其实和Windows下方法大同小异 如果你手上正好有个U盘的话 那就可以试试做一个USB Linux启动盘 它
  • javaee springMVC Map ModelMap ModelAndView el和jstl的使用

    pom依赖
  • ELK Stack 日志平台性能优化实践

    性能分析 服务器硬件Linux 1cpu4GRAM 假设每条日志250Byte 分析 logstash Linux 1cpu 4GRAM 每秒500条日志 去掉ruby每秒660条日志 去掉grok后每秒1000条数据 filebeat L
  • EduCoder_web实训作业--CSS从入门到精通——文本与字体样式

    大家注意了 由于这次好多代码都是分开的 为了方便我把每一关所有代码都发出来了 只要全选粘贴复制就可以了 第二关和第三关的答题区域都是最后一个文件夹 第一关 body 背景渐变 background webkit linear gradien

随机推荐

  • 50岁贷款投资的人,到底经历了什么?

    虽说 成功的投资者大多是孤独的 但是 在学习成长的过程中 参与交流讨论的好处还是很大的 一方面三人行必有我师 一方面通过他人的经验教训 深化自己的思考 前两天 看到这样一个提问 我的中国银行信用卡可以贷款2 6利率 三年还清 共贷15万 我
  • Python 模块 ddt 数据驱动测试

    简介 ddt 提供了一种方便的方法来实现数据驱动测试 Data Driven Testing 数据驱动测试是一种测试方法 通过将测试数据与测试逻辑分开 可以使用不同的数据集来运行相同的测试用例 这样可以提高测试的灵活性和可维护性 减少代码的
  • 为什么说快速排序是性能最好的排序算法?

    刚刚学习了排序这一章 看到了书中最后的一个总结表 心想从表上来看 堆排序不该是最好的排序算法么 不管最好 最坏还是平均情况 时间复杂度都是O nlogn 而且还不像快排和归并排序那样占空间 为什么说快速排序是最好的算法呢 其实经过实验 会发
  • 手把手带你利用苹果手机使用美区礼品卡升级ChatGPT Plus,轻松搞定!

    大家好 我是五竹 昨天用苹果手机尝试了一下 借助App Store 苹果应用商店 升级 Plus 成功了 一共升级了三个号 有两个一气呵成 轻松搞定 最后一个可能触发风控了 但第一时间反馈给了苹果客服 5分钟不到就解决了 不得不说别人家的客
  • 下载Visio2013镜像路径以及安装Visio2013软件

    下载Visio2013镜像路径以及安装Visio2013软件 下载镜像安装路径 https exmail qq com cgi bin ftnExs download k 5736333137c49bbd8e5ddf1c106407561d
  • Java进阶知识点5:服务端高并发的基石 - NIO与Reactor模式以及AIO与Proactor模式

    一 背景 要提升服务器的并发处理能力 通常有两大方向的思路 1 系统架构层面 比如负载均衡 多级缓存 单元化部署等等 2 单节点优化层面 比如修复代码级别的性能Bug JVM参数调优 IO优化等等 一般来说 系统架构的合理程度 决定了系统在
  • 在QGIS下开发python插件

    本文来自CSDN博客 转载请标明出处 http blog csdn net xiluoduyu 出于研究sextante代码的需要 抽空查了下QGIS下python插件的开发流程 具体的操作参考英文的PyQGIS 的开发帮助文档 QGIS是
  • 生成时间段内每一天

    String bigtimeStr 2019 07 01 String endtimeStr 2019 08 01 SimpleDateFormat sdf new SimpleDateFormat yyyy MM dd Date bigt
  • 使用sleuth实现微服务跟踪

    在微服务架构中 众多的微服务之间互相调用 如何清晰地记录服务的调用链路是一个需要解决的问题 同时 由于各种原因 跨进程的服务调用失败时 运维人员希望能够通过查看日志和查看服务之间的调用关系来定位问题 而Spring cloud sleuth
  • aix卷组故障维护

    author skatetime 2009 04 24 故障描述 4 20日早晨 发现日报没有正常发送 登录数据库备机查看原因 查看系统的log命令 errpt more 没有发现什么异常 不过发现有如下错误 F3931284 041005
  • 《动手学深度学习》(七) -- 边界框和锚框

    1 边界框 在目标检测中 我们通常使用边界框 bounding box 来描述对象的空间位置 边界框是矩形的 由矩形左上角的以及右下角的 x x x和 y y y坐标决定 另一种常用的边界框表示方法是边界框中心的
  • 在js中 String 转json

    第一种方式 使用js函数eval testJson eval testJson 是错误的转换方式 正确的转换方式需要加 testJson eval testJson eval 的速度非常快 但是他可以编译以及执行任何JavaScript程序
  • 人脸识别技术也被应用到了移动支付领域

    随着智能手机及互联网的发展 移动支付已经成为了目前我国增速最快的支付方式 在移动支付发展过程中 各种新型的支付方式层出不穷 如二维码支付 NFC支付等 近年来 伴随着人工智能 机器学习及传感器的逐步发展 生物识别技术也被应用到了移动支付领域
  • python提取邮件的附件,以excel为例

    配置邮箱 读取基本的邮件内容请参考 python读取并解析邮箱邮件 读取邮件主题 内容 时间 以excel为例 获取邮件 email value config imap server imap exmail qq com username
  • 变量的作用域和生命周期

    目录 作用域 局部变量的作用域 局部变量的生命周期 生命周期 全局变量的作用域 全局变量的生命周期 作用域 作用域是程序设计概念 一段程序代码中所用到的名字并不总是有效 可用的 而限定这个名字的可用性的范围就是其作用域 通俗来说就是它在哪里
  • 通用定时器part1:相关原理介绍

    2018 4 18 stm32 1 介绍 1 对于STM32f103rc而言 一共存在着8个定时器 有着4个16位通用定时器 2个16位高级定时器 2个16位基本定时器 2 1 高级定时器 1 16位 可以采用向上 向下或向上 下计数器模式
  • Shader的属性和语义

    属性 Shader 属性property就是Unity面板和shader的连接器 Properties Numbers and Sliders ExampleName Integer display name Integer 1 Examp
  • Redis学习:Redis缓存穿透和雪崩

    缓存穿透和雪崩 大规模的缓存击穿 两者的区别就是 缓存穿透是一个key缓存没数据 数据库也没有数据 请求全部打到数据库层面上 数据库也没数数据 无能为力 缓存层和数据库层都没有 真的是透了 雪崩先理解缓存击穿 就是很多请求一个key 这个k
  • obsidian配合hugo的使用,让markdown本地编辑软件与在线化无缝衔接

    下载安装 点击打开obsidian官方网站 下载并安装 安装地址为 C Users 当前账号 AppData Local Obsidian C Users 当前账号 AppData Local obsidian updater 创建新库 起
  • Elasticsearch 之 数据索引

    对于提供全文检索的工具来说 索引时一个关键的过程 只有通过索引操作 才能对数据进行分析存储 创建倒排索引 从而让使用者查询到相关的信息 本篇就ES的数据索引操作相关的内容展开 更多内容参考 Elasticsearch资料汇总 索引操作 最简