我的Elasticsearch系列文章,逐渐更新中,欢迎关注

另外Elasticsearch入门,我强烈推荐ElasticSearch搭建手册给你,非常想尽的入门指南手册。

在本文中,我将讨论Elasticsearch以及如何将其与不同的Python应用程序集成。

什么是ElasticSearch?

ElasticSearch(ES)是基于Apache Lucene构建的分布式且高度可用的开源搜索引擎。这是一个用Java构建的开源,因此可用于许多平台。您以JSON格式存储非结构化数据,这也使其成为NoSQL数据库。因此,与其他NoSQL数据库不同,ES还提供搜索引擎功能和其他相关功能。

ElasticSearch用例

您可以将ES用于多种用途,下面提供了其中的几个:

您正在运行的网站提供许多动态内容。无论是电子商务网站还是博客。通过实施ES,您不仅可以为您的Web应用程序提供强大的搜索引擎,还可以在应用程序中提供本机自动完成功能。

您可以摄取不同种类的日志数据,然后可以用来查找趋势和统计数据。

设置和运行

安装ElasticSearch的最简单方法是下载并运行可执行文件。您必须确保使用的是Java 7或更高版本。

下载后,解压缩并运行其二进制文件。

elasticsearch-6.2.4 bin / elasticsearch

滚动窗口中将有很多文本。如果您看到类似下面的内容,则表明情况已解决。

[2018-05-27T17:36:11,744] [INFO] [oehnNetty4HttpServerTransport] [c6hEGv4] publish_address {127.0.0.1:9200}、bound_addresses {[:: 1]:9200},{127.0.0.1:9200}

但是,既然眼见为实,http://localhost:9200那就在浏览器中或通过cURL 访问URL ,下面的内容应该会很欢迎您。

{

“ name”:“ c6hEGv4”,

“ cluster_name ”:“ elasticsearch”,“ cluster_uuid”:“

HkRyTYXvSkGvvvHX2Q1-oQ”,

“ 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“

},

”标语“:”您知道,要搜索“

}

现在,在我继续使用Python访问Elastic Search之前,让我们做一些基本的事情。正如我提到的,ES提供了REST API,我们将使用它来执行不同的任务。

基本范例

您要做的第一件事就是创建一个 指数。一切都存储在索引中。RDBMS相当于指数 是一个 数据库 因此,请勿将其与您在RDBMS中学习的典型索引概念混淆。我正在使用PostMan运行REST API。

如果运行成功,您将在下面看到类似的响应。

{

“ acknowledged”:true,

“ shards_acknowledged”:true,

“ index”:“ company”

}

因此,我们创建了一个名为company的数据库。换句话说,我们创建了一个名为company的索引。如果您通过浏览器进行访问,则会看到类似以下内容:

http://localhost:9200/company

{

“ company”:{

“ aliases”:{

},

“ mappings”:{

},

“ settings”:{

“ index”:{

“ creation_date”:“ 1527638692850”,

“ number_of_shards”:“ 5”,

“ number_of_replicas”: “ 1”,

“ uuid”:“ RnT-gXISSxKchyowgjZOkQ”,

“ version”:{

“ created”:“ 6020499”

},

“ provided_name”:“ company”

}

}

}

}

稍等片刻mappings,我们稍后再讨论。实际上只不过是创建文档的架构而已。creation_date是不言自明的。的number_of_shards讲述,将让这个数据分区的数量指标。将全部数据保存在单个磁盘上根本没有任何意义。如果您正在运行包含多个Elastic节点的集群,则整个数据将在它们之间拆分。简而言之,如果有5个分片,则整个数据可在5个分片上使用,并且ElasticSearch集群可以处理来自其任何节点的请求。

副本谈论数据的镜像。如果您熟悉主从概念,那么这对您来说应该不是新知识。您可以在此处了解有关基本ES概念的更多信息。

创建索引的cURL版本是单行的。

➜elasticsearch-6.2.4 curl -X PUT本地主机:9200 / company

{“ acknowledged”:true,“ shards_acknowledged”:true,“ index”:“ company”}%

您还可以一次执行索引创建和记录插入任务。您要做的就是以JSON格式传递记录。在PostMan中,您可以像下面这样。

确保设置Content-Type为application/json

company如果它不存在,它将在此处创建一个名为的索引,然后在此处创建一个名为employee的新类型。类型实际上是RDBMS 中表的ES版本。

上面的请求将输出以下JSON结构。

{

“ _index”:“公司”,

“    _ type ”:“员工”,

_ id”:“ 1”,“ _ version”:1,

“结果”:“已创建”,

“ _ shards”:{

“总计”:2,

“成功”:1,

“失败”:0

},

“ _ seq_no”:0,

“ _ primary_term”:1

}

您通过/1作为记录的ID。虽然没有必要。要做的就是_id用value 设置field 1。然后,您以JSON格式传递数据,该数据最终将作为新记录或文档插入。如果您http://localhost:9200/company/employees/1从浏览器访问,您将看到以下内容。

{“ _index”:“公司”,“ _ type”:“员工”,“ _ id”:“ 1”,“ _ version”:1,“ found”:true,“ _ source”:{

“ name”:“ Adnan Siddiqi” ,

“职业”:“顾问”

}

您可以看到实际记录以及元数据。如果您愿意,可以将请求更改为http://localhost:9200/company/employees/1/_source,它将仅输出记录的JSON结构。

cURL版本为:

{

"name" : "c6hEGv4",

"cluster_name" : "elasticsearch",

"cluster_uuid" : "HkRyTYXvSkGvkvHX2Q1-oQ",

"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" : "You Know, for Search"

}

如果您想更新该记录怎么办?好吧,这很简单。您要做的就是更改JSON记录。如下所示:

它将生成以下输出:

{

"company": {

"aliases": {

},

"mappings": {

},

"settings": {

"index": {

"creation_date": "1527638692850",

"number_of_shards": "5",

"number_of_replicas": "1",

"uuid": "RnT-gXISSxKchyowgjZOkQ",

"version": {

"created": "6020499"

},

"provided_name": "company"

}

}

}

}

请注意,该_result字段现在设置为updated而不是created

当然,您也可以删除某些记录。

而且,如果您快要疯了或者您的女朋友已经抛弃了您,则可以通过curl -XDELETE localhost:9200/_all从命令行运行来烧毁整个世界。

让我们做一些基本的搜索。如果运行http://localhost:9200/company/employees/_search?q=adnan,它将搜索类型下的所有字段employees并返回相关记录。

{

"_index": "company",

"_type": "employees",

"_id": "1",

"_version": 1,

"result": "created",

"_shards": {

"total": 2,

"successful": 1,

"failed": 0

},

"_seq_no": 0,

"_primary_term": 1

}

该max_score字段指示记录的相关性,即记录的最高分数。如果有多个记录,那么它将是另一个数字。

您还可以通过传递字段名称来将搜索条件限制为某个字段。因此,http://localhost:9200/company/employees/_search?q=name:Adnan将仅在name文档的字段中搜索。它实际上等效于SQLSELECT * from table where name='Adnan'

我只介绍了基本示例。ES可以做很多事情,但是我将通过阅读文档让您进一步探索它,然后切换到使用Python访问ES。

在Python中访问ElasticSearch

老实说,ES的REST API足够好,您可以使用requests库来执行所有任务。不过,您可以将Python库用于ElasticSearch,以专注于主要任务,而不必担心如何创建请求。

通过pip安装它,然后可以在Python程序中访问它。

pip install elasticsearch

为确保已正确安装,请从命令行运行以下基本代码段:

➜elasticsearch-6.2.4 python

Python 3.6.4 | Anaconda自定义(64位)| (默认值,2018年1月16日,12:04:33)

在darwin上使用[GCC 4.2.1兼容的Clang 4.0.1(标签/ RELEASE_401 / final)]输入以下内容的

“帮助”,“版权”,“信用”或“许可证”更多信息。

➜  elasticsearch-6.2.4 python

Python 3.6.4 |Anaconda custom (64-bit)| (default, Jan 16 2018, 12:04:33)

[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> from elasticsearch import Elasticsearch

>>> es = Elasticsearch([{'host': 'localhost', 'port': 9200}])

>>> es

网页搜索和Elasticsearch

让我们讨论一下使用Elasticsearch的一些实际用例。目的是访问在线食谱并将其存储在Elasticsearch中以用于搜索和分析目的。我们将首先从Allrecipes抓取数据并将其存储在ES中。如果是ES,我们还将创建一个严格的Schema或映射,以便确保以正确的格式和类型对数据进行索引。我只是拉沙拉食谱的清单而已。让我们开始!

抓取数据

结论

Elasticsearch是一个功能强大的工具,通过提供强大的功能以返回最准确的结果集,可以帮助您搜索现有或新应用。我刚刚介绍了要点。阅读文档并熟悉这个强大的工具。特别是模糊搜索功能非常出色。如果有机会,我将在以后的文章中介绍Query DSL。

python snap7 简书_第14篇-Python中的Elasticsearch入门相关推荐

  1. python scatter 简书_写给 Pythonist 的 Spacemacs 入门指北

    前言 最开始,使用 Sublime Text 编码,后来用 Vim 混合 PyCharm 写 Python. 前几天,Github 上的 Spacemacs 已经成功的突破一万 Star, 听说几个我 ...

  2. python snap7 简书_SnapKit真好用

    阿里云2.1.0版本的UI都是基于Storyboard完成的,第一次用Storyboard,感觉很新鲜很好用,到后面真的是深陷泥潭.我把所有的Storyboard都写在Main.Storyboard文 ...

  3. python判断素数的方法简书_深入浅出RSA在CTF中的攻击套路

    0x01 前言 本文对RSA中常用的模逆运算.欧几里得.拓展欧几里得.中国剩余定理等算法不展开作详细介绍,仅对遇到的CTF题的攻击方式,以及使用到的这些算法的python实现进行介绍.目的是让大家能轻 ...

  4. python 数据挖掘 简书_[Python数据挖掘入门与实践]-第一章开启数据挖掘之旅

    1.数据挖掘简介(略) 2.使用Python和IPython Notebook 2.1.安装Python 2.2.安装IPython 2.3.安装scikit-learn scikit-learn是用 ...

  5. python scatter 简书_【挖掘模型】:Python-DBSCAN算法 - 简书

    数据源:data (7).csv data (7).csv DBSCAN算法结果 DBSCAN模型 DBSCAN原理 # DBSCAN算法:将簇定义为密度相连的点最大集合,能够把具有足够高密度的区域划 ...

  6. python项目策划书_跟着销售学python系列(1)--实践项目骨架(1)

    暂时不对自己的背景做任何的交代,  为什么写这个系列, 参加YC培训课最大的总结, 就是别写别思考了. 以前的写的,慢慢搬家过来吧. 学习计划: ✅  learn  python the hard w ...

  7. python写数据结构书_有哪些用 Python 语言讲算法和数据结构的书?

    python数据结构基础工具书籍下载-持续更新​www.jianshu.com 以上网址有大量python数据结构的书籍下载,内容比较长,我这边拷贝了一部分. 本书示例丰富,图文并茂,以让人容易理解的 ...

  8. python 按键精灵 离线_(番外篇)Python操纵网盘客户端批量离线下载电影

    上回(Python实现电影排行榜自动网盘下载(4)Cookies免登录+抓包下载)说到,一段时间内能进行多少次离线下载还是受限于验证码的输入. 在此有两个解决方案, 见招拆招 通过GUI优化验证码输入 ...

  9. python应用实例论文_番外篇——Python多进程应用实例一则

    前言: 现在的电脑普遍进入多核时代,当我们需要做一些计算密集型任务时,运用并行计算能够发挥CPU的性能,也够大大的节省我们的时间.在现在的数据挖掘中,Python是一门非常强大的语言,语法直接明了,易 ...

最新文章

  1. php 缓冲区,PHP的输出缓冲区
  2. 【骚气的动效】外发光涟漪波纹动画、向外辐射动画效果,通常用于地图上面某一个扩散点效果
  3. Blender+Substance Painter全流程制作真实的机器人学习教程
  4. 卢宇:改善在线教育,人工智能大有可为
  5. 怎样设置html的元素属性,Jquery怎么设置元素的属性和样式?
  6. torch uint8 筛选数据
  7. oracle PL/SQL
  8. OS_CORE.C(4)
  9. Redis的简介与安装
  10. 人月神话贯彻执行_人月神话阅读笔记01
  11. ByteBuffer源码分析
  12. LeetCode(122)——买卖股票的最佳时机 II(JavaScript)
  13. 2017python windows 客户端最新版本3.6.2安装教程
  14. Controller比较两个对象discs、outlets中的元素是否相等。相同则相应的checkbox为checked...
  15. 流言终结者: AWR的保留天数和SYSAUX表空间的使用率有关吗?
  16. android log4j日志管理的使用
  17. linux iconv 文件名,Linux_Linux系统下转换文件编码的方法小结,一、利用iconv命令进行文件内 - phpStudy...
  18. 台大matlab教程笔记
  19. java基于SSM的宠物医院信息管理系统
  20. 谷歌插件--SuperCopy(解决网页中文字不可复制的问题)

热门文章

  1. 【Tensorflow+自然语言处理+LSTM】搭建智能聊天客服机器人实战(附源码、数据集和演示 超详细)
  2. 猴子吃桃问题(三种方法解决)
  3. can协议crc计算_CAN总线通信的CRC校验方法
  4. 萌新首发,C/C++(通讯录管理系统)希望大家多多关注、点赞
  5. Loki 学习总结(1)—— Loki 中小项目日志系统的不二之选
  6. 使用ScriptableObject代替部分配置表的坑点
  7. python 批量转换docx只转换了一个出现pywintypes.com_error被调用的对象已与其客户端断开连接
  8. 如何解决“被调用的对象已与其客户端断开连接“
  9. Transformer代码详解与项目实战之Masking
  10. 360 os3.0 android7.1,360手机N5s发布:升级基于安卓7.1的360 OS 2.0系统