es笔记一之es安装与介绍

本文首发于公众号:Hunter后端
原文链接:es笔记一之es安装与介绍

首先介绍一下 es,全名为 Elasticsearch,它定义上不是一种数据库,是一种搜索引擎。

我们可以把海量数据都放到 es 里然后提供搜索操作,但是 MySQL 也同样可以提供搜索,为什么要用 es 呢?

一个是因为它搜索快,使用倒排索引的方式将数据分词之后存储数据,查询的时候直接根据搜索关键词找到相关数据。

另一个是因为它可以提供一些 MySQL 做不到或者比较耗时的模糊搜索,这个我们后续再介绍。

1、es 和 kibana 的安装

es 和 kibana 的安装这里可以直接看我之前的一篇博客文章,讲的很详细,或者去官网找相应的安装步骤。

es和kibana安装

这里我们使用的是 7.6.0 版本。

kibana 是一个界面工具,可以用于在浏览器界面直接操作 es。

2、es 层级和结构介绍

首先,我们进入 kibana 界面,创建一条数据,然后根据这条数据来介绍 es 中结构的层级关系。

进入 kibana 的输入界面,输入:

PUT /customer/_doc/1
{
  "name": "John Doe"
}

点击 PUT 命令同行右边的三角形,或者按住 ctrl + enter 确认,我们就完成了一次数据的创建。

然后输入下面的命令查看这条数据的详情:

GET /customer/_doc/1

通过数据的存储和查看,我们可以差不多了解 es 中数据的操作方式是 restful 风格的,可以通过 GET、PUT、POST、DELETE 的方式来实现数据的增删改查。

然后看一下我们通过 GET 方式获得的数据情况,如下:

{
  "_index" : "customer",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "John Doe"
  }
}

在这个数据结构中,有一些东西是可以和 MySQL 等数据库的结构对应起来的,比如 index 对应 MySQL 中的 database,type 对应 MySQL 中的 table,而 source 中的数据则对应于 MySQL 中一条条的数据。

但是 es 中 source 中的这些字段,比如 name,可以不预先定义,也可以预先定义,这一点不同于 MySQL,es 甚至可以直接写入值,es 会自动为其找到对应的字段属性从而定义。

比如我们前面 PUT 的这条数据,查看 customer 这个数据库 index 的结构,可以看到 es 根据值为其自动创建了属性为 keyword。(es 中字段的各个属性我们后面再介绍)

怎么查看 es 中 index 各个字段的属性呢,比如 customer,如下操作:

GET /customer/_mapping

index 和 type 也一样,如果创建数据的时候不存在,那么 es 也会自动为我们创建相应的层级结构。

3、es 字段介绍

es 中的字段类型挺多的,一般计算机语言有的 es 中也有。

keyword

常用于存储结构化内容,比如email地址,电话号码,名称等等

text

文本类型,常用于保存大段文本,然后可以进行分词搜索等操作

integer

整数

long

浮点型数据

date

日期格式,比如 '2022-01-01 12:00:00'

boolean

布尔型,true/false

数组

es 中没有单独的数组类型,但是当我们确定将某个字段作为数组之后,可以直接将其作为数组使用,但是添加的元素必须是相同的,这个我们后面再介绍。

上面这些字段的含义和使用,这里只是做一个简单的介绍,后面尤其是和 Python 连接使用的时候,我们再对其使用方法做具体详细的介绍。

4、数据准备

在接下来的笔记中,我们将介绍 es 中各种搜索操作,在此之前,我们这里需要手动写入一批数据,具体操作如下。

首先我们去获取一个数据文件,那上面有一批供我们查询使用的数据,这个文件之前在官方文档提供的 github 地址,我去看了下,已经不存在了,所以这里我截取一批数据还是放到名为 accounts.json 文档里,文档等会儿我放在文章末尾,可供拷贝。

我们将这个文件放在某个目录下,然后当前目录执行下面的语句导入到我们在本地启动的 es 中:

curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/_bulk?pretty&refresh" --data-binary "@accounts.json"

然后进入 kibana,查看所有数据库,可以看到已经多了一个名为 bank 的数据库:

GET /_cat/indices

这是 json 文件的地址:accounts.json

下一篇笔记我们开始介绍 es 的搜索。

如果想获取更多后端相关文章,可扫码关注阅读:
image

本文转载于网络 如有侵权请联系删除

相关文章

  • 12 | PyTorch全连接网络:建立区分鸟和飞机的模型

    上一小节我们终于开始搭建神经网络了,只不过它很简单,并且对我们更早的时候做的温度计转换模型做了一次迭代,甚至连效果都没有太大的变化,这一小节我们开始处理一些有意思的事情:做一个图像分类的模型。小图像数据集今天要用的数据集称为CIFAR-10,关于这个数据集我前几天还看到一个跟它相关的趣闻,谷歌一个大牛发布了一篇论文,用数万美元TPU算力,实现在CIFAR-10上0.03%的改进,创造了新的SOTA,受到了很多人的质疑。因为CIFAR-10数据集过于简单,不过这仍然是一个非常经典的数据集,很适合我们拿来做小实验。CIFAR-10数据集一共包含10个类别的RGB彩色图片:飞机(airplane)、汽车(automobile)、鸟类(bird)、猫(cat)、鹿(deer)、狗(dog)、蛙类(frog)、马(horse)、船(ship)和卡车(truck)。图片的尺寸为32×32,数据集中一共有50000张训练图片和10000张测试图片。 示例如下,可以看到32×32已经很模糊了,不过人眼大概也能看出是什么东西。我们先把数据集下载下来。下载的过程可能有点慢。这里用到了一个方法torch.m

  • Docker安装Mysql8和sqlyong连接报错2058的解决方法[随笔记录]

    docker安装mysql #dockerpullmysql #dockercreate--namemysql8-eMYSQL_ROOT_PASSWORD=root-p3306:3306mysql:latest #dockerstartmysql8 进入到容器 #dockerexec-itmysql8bash mysql连接 #mysql-uroot-proot 安装mysql8.0.11后使用SQLyog连接数据库但报错2058的解决方法 报错的原因可能是因为新版mysql的加密方式改变导致SQLyog无法连接上数据库 #修改密码 ALTERUSER'root'@'%'IDENTIFIEDWITHmysql_native_passwordBY'zhongxu'; /** <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version&g

  • Mac|连接HDMI后断网

    问题背景1.MacBookPro2017款(接口为USB-C)+TP-LINK(无线网络频段为2.4G)2.疫情期间居家办公买了台显示器(Coding更舒服)+拓展坞HDMI连接3.连接显示器后电脑瞬间没网,拔掉HDMI连接线后瞬间可正常上网查询问题1.询问同事之后发现也遇到类似问题,但未解决2.经过多方网上资料搜寻,最终发现问题:由于HDMI与2.4g网络起了冲突缘故导致无法连接网络3.参考连接:https://www.cnblogs.com/quanweiru/p/12761090.html 解决方案1.修改路由器的无线信道,不使用系统提供的自动,选择其他(路由设置>无限设置>无限信道)(例如我选择的是1通道)TP-LINK路由器登录地址:http://tplogin.cn/2.保存退出>重启路由>重新使用HDMI连接显示器(问题完美解决!)建议疫情期间居家办公的朋友,让居家办公更有仪式感:1.每天要保持以前到公司上班的节奏,准时上班、下班。2.要做事情约定回复时间的好习惯,让自己具有时间概念。3.每天坚持开项目内部会议,让自己有和同事们一起在办公的感觉。e

  • Vue回炉重造之封装防刷新考试倒计时组件

    <!--考试倒计时组件--> <template> <divclass="time"> <p>00:{{timerCount2}}:{{timerCount1}}</p> <button@click="reset">重新计时</button> </div> </template> <script>复制exportdefault{ name:“Time”, data(){ return{ timeSeconds:0, timeMinutes:0, seconds:59,//秒 minutes:1,//分 timer:null }; }, methods:{ num(n){ returnn<10?“0”+n:“”+n; }, //重新计时 reset(){ sessionStorage.removeItem(“answered”); window.location.reload(); localStorage.remove

  • Python打包exe初体验----Pyinstaller

    环境==Python3.9==pyinstaller安装pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplepyinstaller#清华源复制利用清华源进行帮助下载。打包参数详细参数可以参考:(英文版:传送门)原文(翻译版:传送门)其中比较常用的有:参数作用-F生成的结果是一个exe文件,所有的第三方依赖、资源和代码均被打包进该exe内-D生成结果是一个目录,各种第三方依赖、资源和exe同时存储在该目录-w使用项目的GUI界面,无cmd控制台-c默认参数,使用的是cmd控制台-n生成.exe文件和.spec的文件名,默认情况是用户脚本的名称-i为.exe文件指定图标–hidden-import打包额外的py库,有些imoprt没有正确分析出来,运行时会报错importerror,这时就可以使用该参数注意:其中-D和-F是互斥参数、-w和-c是互斥参数打包第一个.exe文件第一步:先创建一个py文件。我这里是利用记事本写的,然后修改文件后缀名.py放在了D盘。print("hello") input()复制在这里插入

  • 肝九千字长文 | MyBatis-Plus 码之重器 lambda 表达式使用指南,开发效率瞬间提升80%

    一、回顾现在越来越流行基于SpringBoot开发Web应用,其中利用Mybatis作为数据库CRUD操作已成为主流。楼主以MySQL为例,总结了九大类使用Mybatis操作数据库SQL小技巧分享给大家。分页查询预置sql查询字段一对多级联查询一对一级联查询foreach搭配in查询利用if标签拼装动态where条件利用choose和otherwise组合标签拼装查询条件动态绑定查询参数:_parameter利用set配合if标签,动态设置数据库字段更新值01分页查询利用limit设置每页offset偏移量和每页size大小。select*fromsys_useru LEFTJOINsys_user_sitesONu.user_id=s.user_id LEFTJOINsys_deptdONd.dept_id=s.dept_id LEFTJOINsys_emailinfoeONu.user_id=e.useridANDe.MAIN_FLAG='Y' <where> <includerefid="userCondition"/&g

  • 渠道管理系统解决方案:企业级营销系统类型、定位、管理

    营销渠道管理系统是指商品从生产领域转移到消费领域所经过的各个环节和营运通道紧密联合的有机组织体系。随着电商系统开发搭建技术的进步、直销和网上营销的迅速发展,对于营销渠道的性质和设计产生了深远的影响。最主要的趋势是中介弱化。中介弱化是指产品和服务的制造商剔除营销中介中的某一层次或绕过营销中介,直接向最终购买者销售;全新的渠道中介形式将取代旧的形式也属于中介弱化的另一种形式。中介弱化会带来各种新渠道之间的竞争。中介弱化之所以能够发生,是因为新的营销渠道管理形式给消费者创造了更多的价值。对于传统的经销商来说,要想不被挤掉,就要不断寻求为顾客提供价值的新方法。许多受网络竞争威胁的企业已经学会了利用网络更好地为顾客服务。对制造商而言,有了更有效的渠道出现后,他们除了进行变革之外别无选择。变革是有风险的,大多数企业由于害怕落后,不惜以得罪营销渠道平台合作伙伴为代价进行变革,今时今日只有搭建出专属的营销渠道管理系统才能在企业转型、数字化发展上抢占优势,不断创造顾客价值的企业才有可能在这一场竞争中取得成功。支持搭建的营销渠道系统类型(一)传统营销渠道系统传统营销渠道系统由生产商、批发商和零售商组成。在

  • Spring Cloud Alibaba -Nacos入门讲解

    1.SpringCloudAlibaba介绍SpringCloudAlibaba为分布式应用程序开发提供了一站式解决方案。它包含了开发分布式应用程序所需的所有组件,使得你可以轻松地使用SpringCloud开发应用程序。使用SpringCloudAlibaba,只需要添加一些注释和少量配置即可将SpringCloud应用程序连接到Alibaba的分布式解决方案,并使用Alibaba中间件构建分布式应用程序系统。特性:流量控制和服务降级:Sentinel进行流量控制,断路和系统自适应保护。服务注册和发现:实例可以在Nachos中注册,并且客户端可以使用Spring管理的Bean发现实例。支持Ribbon。分布式配置:使用Nacos作为数据存储。事件驱动:建立与SpringCloudStreamRocketMQBinder连接的高度可扩展的事件驱动型微服务。消息总线:利用SpringCloudBusRocketMQ链接分布式系统的节点。分布式事务:支持高性能、易于使用的分布式事务。DubboRPC:通过DubboRPC扩展SpringCloud服务之间调用的通信协议。阿里云对象存储:阿里云

  • RTSP协议视频平台EasyNVR在什么情况下会获取录像失败?

    对于视频服务,直播和存储肯定是必不可少的环节,我们的视频流媒体服务器EasyNVR是用于安防行业的软件,主要是用于进行直播和录像存储。我们的EasyNVR录像是由每个小时组成的(EasyNVR存储的录像为什么呈现每小时一段),更加方便用户对于录像的检索。EasyNVR录像回看没有数据最近有客户反应,进行查看录像回看发现录像没有数据,但是用户并没有进行删除录像的操作,而录像却查找不到,并显示空白。原因分析首先我们先进行分析查找/nginx/conf/easydss.conf文件进行查看录像的路径在哪里(有些用户习惯单独放入单独磁盘)如下图所示:查看record录像目录的地址,搜索用户自定义的地址是否存在。在找到record目录之后,我们顺着查找到的地址去看看有没有record这个目录。在上图输入命令pwd后,可以看到record目录是存在的,这个时候我们进入里面查看是否有录像。在这个时候发现里面是有数据的,但是只有一天的视频,接下来我们来查看是什么原因导致无法进行查看录像的。在进行自我分析之后,我想到了一个可能,有可能权限被更改,所以输入ll命令来查看权限是否正常:解决问题从以上的分析中

  • C++之rapidjson构造Json数据集合

    版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/z2066411585/article/details/102769384项目中用到rapidjson开源库,用于json数据的解析和封装.记录下使用的一些技巧构建数组对象"extra":{ "sceneList":[ { "sceneId":"aaaaaaaa", "sceneStatus":0 }, { "sceneId":"aaaaaaaa", "sceneStatus":1 }, { "sceneId":"aaaaaaaa", "sceneStatus":2 } ] }复制代码如下://申请数组 Valuearray2(kArrayType); for(inti=0;i<3;i++){ //申请对象 Valu

  • python +selenium识别不来click事件,出现报错

    assert"login"inbrowser.titlebrowser.implicitly_wait(10)elem=browser.find_element_by_id("txtAccount")#Findthequeryboxelem.send_keys("0@cm.com")log=browser.find_element_by_id("txtPwd2")log.send_keys("123456"+Keys.RETURN)#becarefullythebig-smalltime.sleep(2)#Letthepageload,willbeaddedtotheAPI#browser.find_elements_by_xpath("//ul[@id='menu']/li[2]/a").click()print"contracttobeassigned"browser.implicitly_wait(10)browser.f

  • Linux安装任意版本的dotnet环境

    下载地址https://www.microsoft.com/net/download/dotnet-core/2.1安装符合服务器CPU架构的二进制包。如果架构不对,会出现一下错误:-bash:/usr/bin/dotnet:cannotexecutebinaryfile复制下载(比如:SDK2.1.300)wgethttps://download.microsoft.com/download/8/8/5/88544F33-836A-49A5-8B67-451C24709A8F/dotnet-sdk-2.1.300-linux-x64.tar.gz安装mkdir-p/usr/share/dotnet&&tarzxfdotnet-sdk-2.1.300-linux-x64.tar.gz-C/usr/share/dotnet配置ln-s/usr/share/dotnet/dotnet/usr/bin/dotnet验证异常处理FailFast:Couldn'tfindavalidICUpackageinstalledonthesystem.yuminstallicu

  • ajax学习小结

    ajax学习小结一、Ajax AsynchronousJavaScriptAndXML=异步的JavaScript及XML。 目的:使得整个页面不刷新也能出现效果。没有后退按钮。 二、XMLHttprequest(由浏览器内核创建) 方法: open("get/post","URL"); send(); 属性: readyState客户端请求就绪状态码 status服务器响应状态码 responseText响应的文本内容 responseXML响应的XML文档对象(一般不用) 事件处理器: onreadystatechange 示例代码: <scripttype="text/javascript"> //方式1 functionckName(){ //获取用户名对象 varname=document.getElementsByTagName("input")[0]; //创建XMLHttpRequest对象 varxhr=getXMLHttpRequest(); //处理响应结果,创建

  • 【Storm篇】--Storm从初始到分布式搭建

    一、前述Storm是一个流式处理框架,相比较于SparkStreaming是一个微批处理框架,hadoop是一个批处理框架。二、搭建流程1.集群规划        Nimbus   Supervisor  Zookeeper node01     1                            node02                1                     1 node03                1               1node04                1                     12.配置node01作为nimbus。  vimconf/storm.yamlstorm.zookeeper.servers: -"node02" -"node03" -"node04" storm.local.dir:"/tmp/storm" nimbus.host:"node01" supervisor.slots.por

  • 移动办公市场受资本青睐 微洽获千万融资

    财经作家吴晓波说:中国的资本市场疯了。正处在一个非理性繁荣的抛物线通道中。这应该是近十年来最大的一次资本泡沫运动。而国外的研究机构关于2015年亚洲投资趋势分析中表示中国IT投资将进入理性增长期,可就在专家们为资本神话何时梦醒而争论不休的时候,又一家跨企业移动沟通协作创业公司微洽获得资本千万融资。 最初理解微洽的时候,他们宣传是“企业微信第一品牌”,一直以为只是一家企业IM公司,不过从最新官网的介绍来看微洽已经将IM作为基础能力,更多地发力移动场景,比如移动办公、外勤管理和跨企业移动沟通协作。 其实跟微洽类似的公司很多,比如早期就获得风投的IMO,以前飞信的变身体融云,以及环信,虽然每家都以IM沟通协作为核心,但是发展路线图又有不同,IMO是工具型产品,融云和环信是强调是平台的属性,而微洽的核心业务将更多的集中在跨企业移动沟通协作场景上。 目前微洽已经有11万企业入驻,融资后的微洽将强化移动办公的能力,从这个最为刚需的市场“抢用户”,并将跨企业协作、商务社交,作为增加用户黏性的“护城河”,而IM将成为微洽产品的核心标配。面对阿里钉钉和微信企业号的竞争,微洽其实可以通过更专注于小微企

  • 腾讯云游戏数据库TcaplusDB清除表数据api接口

    1.接口描述接口请求域名:tcaplusdb.tencentcloudapi.com。 根据给定的表信息,清除表数据。 默认接口请求频率限制:20次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见公共请求参数。 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:ClearTables。 Version 是 String 公共参数,本接口取值:2019-08-23。 Region 是 String 公共参数,详见产品支持的地域列表。 ClusterId 是 String 表所属集群实例ID SelectedTables.N 是 ArrayofSelectedTableInfoNew 待清理表信息列表 3.输出参数 参数名称 类型 描述 TotalCount Integer 清除表结果数量 TableRe

  • 浅谈子段、子串、子序列的区别

    浅谈子段、子串、子序列的区别 子段和子串都是连续的。子序列是可断开的。 子段是数字序列,子串是字符串的定义。 就是这个区别。

  • [代码质量] Git统计本次提交新增代码行数,建议每个评审commit新增行数小于400行

      gitlogHEAD~1..HEAD--author="$(gitconfig--getuser.name)"--pretty=tformat:--numstat|awk'{add+=$1;subs+=$2;loc+=$1+$2}END{printf"(HEAD~1,HEAD] 新增行数:%s删除行数:%s总行数:%s\n",add,subs,loc}' 参考:https://www.cnblogs.com/bellkosmos/p/5923439.html https://blog.csdn.net/qq_38152806/article/details/90210927

  • My journey with Vue

    一、组件 如果我们将一个页面中所有的处理逻辑全部放在一起,处理起来就会变得非常复杂,而且不利于后续的管理以及扩展,但如果,我们将一个页面拆分成一个个小的功能块,每个功能块完成属于自己这部分独立的功能,那么之后整个页面的管理和维护就变得非常容易了。如果我们将一个个功能块拆分后,就可以像搭建积木一下来搭建我们的项目。   1.0、SPA SPA指的是SinglePageApplication,就是只有一张Web页面的应用。单页应用程序(SPA)是加载单个HTML页面并在用户与应用程序交互时动态更新该页面的Web应用程序。浏览器一开始会加载必需的HTML、CSS和JavaScript,所有的操作都在这张页面上完成,都由JavaScript来控制。因此,对单页应用来说模块化的开发和设计显得相当重要。 单页Web应用,顾名思义,就是只有一张Web页面的应用。浏览器一开始会加载必需的HTML、CSS和JavaScript,之后所有的操作都在这张页面上完成,这一切都由JavaScript来控制。因此,单页Web应用会包含大量的JavaScript代码,复杂度可想而知,模块化开发和设计

  • 阿里 SQL 代码编码原则和规范

    阿里SQL代码编码原则和规范 编码原则 SQL代码的编码原则如下: 代码功能完善。 代码行清晰、整齐,代码行的整体层次分明、结构化强。 代码编写充分考虑执行速度最优的原则。 代码中需要添加必要的注释,以增强代码的可读性。 规范要求并非强制性约束开发人员的代码编写行为。实际应用中,在不违反常规要求的前提下,允许存在可以理解的偏差。 SQL代码中应用到的所有SQL关键字、保留字都需使用全大写或小写,例如select/SELECT、from/FROM、where/WHERE、and/AND、or/OR、union/UNION、insert/INSERT、delete/DELETE、group/GROUP、having/HAVING和count/COUNT等。不能使用大小写混合的方式,例如Select或seLECT等方式。 4个空格为1个缩进量,所有的缩进均为1个缩进量的整数倍,按照代码层次对齐。 禁止使用select*操作,所有操作必须明确指定列名。 对应的括号要求在同一列的位置上。 SQL编码规范 SQL代码的编码规范如下: 代码头部 代码头部添加主题、功能描述、作者和日期等信息,

  • 点滴3

    1.2018-02-05:关于事物rollback-only异常:标识当前事物只回滚,但是回滚的动作需要异常触发,只有异常往上抛并且被捕捉到才会触发,如果最终没能够触发,事物又需要回滚就会报这个错,而且前面执行的都会保存到数据库  解决方式:1某段逻辑不加事物           2某段最终的逻辑不要抛出异常,事物没有捕捉到异常,就不会把事物标识成只回滚,但重点在于一定不能有任何地方抛出异常,这一点很难保证       3        MethodA不加事务,所以执行到最后就不会commit,SUPPORTS和NOT_SUPPORTED都可以实现这种功能。         2)MethodD设置不共享事务,拥有自己单独的事务。验证发现,REQUIRES_NEW可以实现这种功能。          @Transactional(propagation 

相关推荐

推荐阅读