位置: IT常识 - 正文

Elasticsearch基本介绍及其与Python的对接实现(elasticsearch基本概念)

编辑:rootadmin

推荐整理分享Elasticsearch基本介绍及其与Python的对接实现(elasticsearch基本概念),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:elasticsearch基本原理,elasticsearch基础,elasticsearch基本用法,elasticsearch基本概念,elasticsearch基本操作,elasticsearch基本操作,elasticsearch基本语法,elasticsearch基本概念,内容如对您有帮助,希望把文章链接给更多的朋友!

什么是 Elasticsearch

想查数据就免不了搜索,搜索就离不开搜索引擎,百度、谷歌都是一个非常庞大复杂的搜索引擎,他们几乎索引了互联网上开放的所有网页和数据。然而对于我们自己的业务数据来说,肯定就没必要用这么复杂的技术了,如果我们想实现自己的搜索引擎,方便存储和检索,Elasticsearch 就是不二选择,它是一个全文搜索引擎,可以快速地储存、搜索和分析海量数据。

为什么要用 Elasticsearch

Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。

那 Lucene 又是什么?Lucene 可能是目前存在的,不论开源还是私有的,拥有最先进,高性能和全功能搜索引擎功能的库,但也仅仅只是一个库。要用上 Lucene,我们需要编写 Java 并引用 Lucene 包才可以,而且我们需要对信息检索有一定程度的理解才能明白 Lucene 是怎么工作的,反正用起来没那么简单。

那么为了解决这个问题,Elasticsearch 就诞生了。Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目标是使全文检索变得简单,相当于 Lucene 的一层封装,它提供了一套简单一致的 RESTful API 来帮助我们实现存储和检索。

所以 Elasticsearch 仅仅就是一个简易版的 Lucene 封装吗?那就大错特错了,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:

一个分布式的实时文档存储,每个字段可以被索引与搜索

一个分布式实时分析搜索引擎

能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据

总之,是一个相当牛逼的搜索引擎,维基百科、Stack Overflow、GitHub 都纷纷采用它来做搜索。

Elasticsearch 的安装

我们可以到 Elasticsearch 的官方网站下载 Elasticsearch:https://www.elastic.co/downloads/elasticsearch,同时官网也附有安装说明。

首先把安装包下载下来并解压,然后运行 bin/elasticsearch(Mac 或 Linux)或者 bin\elasticsearch.bat (Windows) 即可启动 Elasticsearch 了。

我使用的是 Mac,Mac 下个人推荐使用 Homebrew 安装:

brew install elasticsearch

Elasticsearch 默认会在 9200 端口上运行,我们打开浏览器访问

http://localhost:9200/ 就可以看到类似内容:

{"name":"atntrTf","cluster_name":"elasticsearch","cluster_uuid":"e64hkjGtTp6_G2h1Xxdv5g","version":{"number":"6.2.4","build_hash":"ccec39f","build_date":"2018-04-12T20:37:28.497551Z","build_snapshot":false,"lucene_version":"7.2.1","minimum_wire_compatibility_version":"5.6.0","minimum_index_compatibility_version":"5.0.0"},"tagline":"YouKnow,forSearch"}

如果看到这个内容,就说明 Elasticsearch 安装并启动成功了,这里显示我的 Elasticsearch 版本是 6.2.4 版本,版本很重要,以后安装一些插件都要做到版本对应才可以。

接下来我们来了解一下 Elasticsearch 的基本概念以及和 Python 的对接。

Elasticsearch 相关概念

在 Elasticsearch 中有几个基本的概念,如节点、索引、文档等等,下面来分别说明一下,理解了这些概念对熟悉 Elasticsearch 是非常有帮助的。

Node 和 Cluster

Elasticsearch 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elasticsearch 实例。

单个 Elasticsearch 实例称为一个节点(Node)。一组节点构成一个集群(Cluster)。

Index

Elasticsearch 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。

所以,Elasticsearch 数据管理的顶层单位就叫做 Index(索引),其实就相当于 MySQL、MongoDB 等里面的数据库的概念。另外值得注意的是,每个 Index (即数据库)的名字必须是小写。

Document

Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。

Document 使用 JSON 格式表示,下面是一个例子。

同一个 Index 里面的 Document,不要求有相同的结构(scheme),但是最好保持相同,这样有利于提高搜索效率。

Elasticsearch基本介绍及其与Python的对接实现(elasticsearch基本概念)

Type

Document 可以分组,比如 weather 这个 Index 里面,可以按城市分组(北京和上海),也可以按气候分组(晴天和雨天)。这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document,类似 MySQL 中的数据表,MongoDB 中的 Collection。

不同的 Type 应该有相似的结构(Schema),举例来说,id 字段不能在这个组是字符串,在另一个组是数值。这是与关系型数据库的表的一个区别。性质完全不同的数据(比如 products 和 logs)应该存成两个 Index,而不是一个 Index 里面的两个 Type(虽然可以做到)。

根据规划,Elastic 6.x 版只允许每个 Index 包含一个 Type,7.x 版将会彻底移除 Type。

Fields

即字段,每个 Document 都类似一个 JSON 结构,它包含了许多字段,每个字段都有其对应的值,多个字段组成了一个 Document,其实就可以类比 MySQL 数据表中的字段。

在 Elasticsearch 中,文档归属于一种类型(Type),而这些类型存在于索引(Index)中,我们可以画一些简单的对比图来类比传统关系型数据库:

Relational DB -> Databases -> Tables -> Rows -> Columns

Elasticsearch -> Indices -> Types -> Documents -> Fields

以上就是 Elasticsearch 里面的一些基本概念,通过和关系性数据库的对比更加有助于理解。

Python 对接 Elasticsearch

Elasticsearch 实际上提供了一系列 Restful API 来进行存取和查询操作,我们可以使用 curl 等命令来进行操作,但毕竟命令行模式没那么方便,所以这里我们就直接介绍利用 Python 来对接 Elasticsearch 的相关方法。

Python 中对接 Elasticsearch 使用的就是一个同名的库,安装方式非常简单:

pip3 install elasticsearch

官方文档是:https://elasticsearch-py.readthedocs.io/,所有的用法都可以在里面查到,文章后面的内容也是基于官方文档来的。

创建 Index

我们先来看下怎样创建一个索引(Index),这里我们创建一个名为 news 的索引:

fromelasticsearchimportElasticsearches=Elasticsearch()result=es.indices.create(index='news',ignore=400)print(result)

如果创建成功,会返回如下结果:

{'acknowledged':True,'shards_acknowledged':True,'index':'news'}

返回结果是 JSON 格式,其中的 acknowledged 字段表示创建操作执行成功。

但这时如果我们再把代码执行一次的话,就会返回如下结果:

{'error': {'root_cause': [{'type': 'resource_already_exists_exception', 'reason': 'index [news/QM6yz2W8QE-bflKhc5oThw] already exists', 'index_uuid': 'QM6yz2W8QE-bflKhc5oThw', 'index': 'news'}], 'type': 'resource_already_exists_exception', 'reason': 'index [news/QM6yz2W8QE-bflKhc5oThw] already exists', 'index_uuid': 'QM6yz2W8QE-bflKhc5oThw', 'index': 'news'}, 'status': 400}

它提示创建失败,status 状态码是 400,错误原因是 Index 已经存在了。

注意这里我们的代码里面使用了 ignore 参数为 400,这说明如果返回结果是 400 的话,就忽略这个错误不会报错,程序不会执行抛出异常。

假如我们不加 ignore 这个参数的话:

es=Elasticsearch()result=es.indices.create(index='news')print(result)

再次执行就会报错了:

raiseHTTP_EXCEPTIONS.get(status_code,TransportError)(status_code,error_message,additional_info)elasticsearch.exceptions.RequestError:TransportError(400,'resource_already_exists_exception','index[news/QM6yz2W8QE-bflKhc5oThw]alreadyexists')

这样程序的执行就会出现问题,所以说,我们需要善用 ignore 参数,把一些意外情况排除,这样可以保证程序的正常执行而不会中断。

删除 Index

删除 Index 也是类似的,代码如下:

fromelasticsearchimportElasticsearches=Elasticsearch()result=es.indices.delete(index='news',ignore=[400,404])print(result)

这里也是使用了 ignore 参数,来忽略 Index 不存在而删除失败导致程序中断的问题。

如果删除成功,会输出如下结果:

{'acknowledged': True}

如果 Index 已经被删除,再执行删除则会输出如下结果:

{'error':{'root_cause':[{'type':'index_not_found_exception','reason':'nosuchindex','resource.type':'index_or_alias','resource.id':'news','index_uuid':'_na_','index':'news'}],'type':'index_not_found_exception','reason':'nosuchindex','resource.type':'index_or_alias','resource.id':'news','index_uuid':'_na_','index':'news'},'status':404}

这个结果表明当前 Index 不存在,删除失败,返回的结果同样是 JSON,状态码是 400,但是由于我们添加了 ignore 参数,忽略了 400 状态码,因此程序正常执行输出 JSON 结果,而不是抛出异常。

插入数据

Elasticsearch 就像 MongoDB 一样,在插入数据的时候可以直接插入结构化字典数据,插入数据可以调用 create() 方法,例如这里我们插入一条新闻数据:

fromelasticsearchimportElasticsearches=Elasticsearch()es.indices.create(index='news',ignore=400)data={'title':'美国留给伊拉克的是个烂摊子吗','url':'http://view.news.qq.com/zt2011/usa_iraq/index.htm'}result=es.create(index='news',doc_type='politics',id=1,body=data)print(result)

这里我们首先

本文链接地址:https://www.jiuchutong.com/zhishi/303196.html 转载请保留说明!

上一篇:js创建对象的5种方式(js创建对象的三种方式)

下一篇:phpcms是个什么东西(phpcms是什么框架)

  • 鸿蒙系统怎么设置软件应用锁(鸿蒙系统怎么设置)

    鸿蒙系统怎么设置软件应用锁(鸿蒙系统怎么设置)

  • 苹果腾讯会议录屏为什么没有声音(苹果腾讯会议录音)

    苹果腾讯会议录屏为什么没有声音(苹果腾讯会议录音)

  • iphone关闭app刷新有什么影响(iphone关闭app刷新还可以接收到消息)

    iphone关闭app刷新有什么影响(iphone关闭app刷新还可以接收到消息)

  • 小米10使用的处理器型号(小米10的使用体验)

    小米10使用的处理器型号(小米10的使用体验)

  • 小红书自动续费能退吗(小红书自动续费199)

    小红书自动续费能退吗(小红书自动续费199)

  • 手机打电话自动录音怎么取消(手机打电话自动录音怎么设置)

    手机打电话自动录音怎么取消(手机打电话自动录音怎么设置)

  • 微信专清怎么卡住不动了(微信专清在哪儿)

    微信专清怎么卡住不动了(微信专清在哪儿)

  • 想看阻止来电后的短信(阻止来电怎么看)

    想看阻止来电后的短信(阻止来电怎么看)

  • qq消息推送在哪里设置打开或者关闭(扣扣消息推送在哪里)

    qq消息推送在哪里设置打开或者关闭(扣扣消息推送在哪里)

  • 安装内存4g可用2g是什么情况(安装内存4g可用2.92g是什么情况)

    安装内存4g可用2g是什么情况(安装内存4g可用2.92g是什么情况)

  • seagate是什么硬盘(seagate硬盘有什么用)

    seagate是什么硬盘(seagate硬盘有什么用)

  • 微信声音锁别人能解吗(怎么关闭微信发语音咻的声音)

    微信声音锁别人能解吗(怎么关闭微信发语音咻的声音)

  • 华为手机p和mate系列的区别(华为手机p和mate系列哪个好)

    华为手机p和mate系列的区别(华为手机p和mate系列哪个好)

  • 快手账号异常收不到语音验证码(快手账号异常收不到信息)

    快手账号异常收不到语音验证码(快手账号异常收不到信息)

  • ps通道被隐藏怎么办

    ps通道被隐藏怎么办

  • power键是什么键(power 键)

    power键是什么键(power 键)

  • 魅族16T怎么恢复照片(魅族16怎么恢复root)

    魅族16T怎么恢复照片(魅族16怎么恢复root)

  • 微信横屏模式是什么(微信横屏模式是啥意思)

    微信横屏模式是什么(微信横屏模式是啥意思)

  • 拼多多怎么取消退款(拼多多怎么取消0元下单)

    拼多多怎么取消退款(拼多多怎么取消0元下单)

  • 11pro可以双卡吗(11pro可以双卡双待?)

    11pro可以双卡吗(11pro可以双卡双待?)

  • b站好友是互相关注吗(b站的朋友怎么相互称呼)

    b站好友是互相关注吗(b站的朋友怎么相互称呼)

  • 小米卡丁车9和PRO区别(小米卡丁车pro21款)

    小米卡丁车9和PRO区别(小米卡丁车pro21款)

  • win11怎么显示回收站? windows11显示桌面回收站图标的技巧(windows11怎么回到桌面)

    win11怎么显示回收站? windows11显示桌面回收站图标的技巧(windows11怎么回到桌面)

  • 最早的操作系统是什么(最早的操作系统被称为什么操作系统)

    最早的操作系统是什么(最早的操作系统被称为什么操作系统)

  • 城建税的计税依据是增值税和消费税的和吗
  • 税务机关是什么
  • 企业可以找审计人员吗
  • 计提生产车间工人和车间管理人员工资
  • 不知道进价怎么求利润
  • 预提工资计入哪个科目
  • 免交城建税的会计分录
  • 缴纳个人社保在哪里可以缴
  • 税务申报有什么技巧
  • 什么费用可以报销工会经费
  • 增值税专用发票电子版
  • 银行汇票退回
  • 企业购买房产如何列入投资计划的
  • 商场采用联营方式的原因
  • 保险收入如何做账务处理?
  • 无形资产原值变动账务处理
  • 股东转入的钱算什么
  • 计提租金分录怎么处理
  • 企业发生的借款费用,可直接归属于
  • 进口关税专用缴款书在哪里打印
  • 公司法人信息变更是先去税务局还是先去银行
  • 退回多交的所得税怎么做分录小规模
  • 增值税2017年起征点
  • 公户转账给个人没有票
  • 年所得12万以下还用年度申报吗
  • 一般纳税人增值税申报操作流程
  • 防洪工程维护费取消
  • 收到投资款怎么做记账凭证
  • 小规模所得税表格模板
  • 企业为员工支付房租交个税吗
  • 销售应税产品分录
  • 向股东分配股利会影响所有者权益吗
  • sysprep.exe是什么
  • 租赁合同维修义务谁承担
  • 个人所得税住房租金可以扣多少
  • win7系统中文乱码怎么解决
  • php快递查询系统
  • 任务管理器无法完成操作拒绝访问
  • 固定资产内部抵消例题
  • 违约罚款的会计分录
  • 固定资产后续支出一律计入固定资产成本
  • php 提交表单
  • 专利权出资会计科目
  • thinkphp input
  • 支付宝提现到对公账户怎么做账
  • vue3使用教程
  • 收到银行开的手续费发票怎么做分录
  • 微信小程序云开发控制台
  • 递归最小二乘法辨识参数
  • 个体工商户一年要交多少税
  • 短期投资属于短期资产吗
  • php 清除缓存
  • 差额征税的扣除额是填什么钱
  • 关于在使用手机
  • 职工福利费相关文件有哪些
  • 母公司为子公司承担税费
  • 认证失败,未获取到区域信息
  • 债务重组的会计例题
  • 本年负数去年正数如何算同比
  • 员工工资占公司收入
  • 影响固定资产折旧的基本因素不包括
  • 发现以前的账做错了
  • 代办营业执照安全可靠吗
  • mongodb与mysql相比的优缺点
  • linux系统基本指令
  • 了解的反义词
  • 为快捷方式建立快捷方式
  • macos手势
  • 无法安装windows xp
  • win10系统设置锁屏密码
  • windows10直接安装
  • opengl二维绘图函数
  • windows批处理命令教程
  • jQuery 判断JSON
  • jQuery的 $.ajax防止重复提交的两种方法(推荐)
  • 如何使用wordpress
  • flappy bird攻略
  • jquery获取当前元素是第几个元素
  • 无锡医疗保险缴费比例
  • 山东耕地占用税税率
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设