在本文章中,我将展示如何使用 Python 来对索引进行 Bulk 写入。在单个 Bulk API 调用中执行多个索引或删除操作。 这减少了开销并且可以大大提高索引速度。

在今天的展示中,我将使用 Jupyter 来进行演示。如果你对 Jupyter 还不是很熟的话,请参阅我之前的文章 “ Elasticsearch:使用 Jupyter Notebook 创建 Python 应用导入 CSV 文件 ”。

首先,我们来创建一个叫做 bulk 的 notebook。

jupyter notebook

我们输入如下的代码。它创建一个连接到 Elasticsearch 的实例:

from datetime import datetime
from elasticsearch import Elasticsearch
from elasticsearch import helpers
import time
es = Elasticsearch('localhost:9200')

我们接着输入如下的代码:

Bulk inserts snippet with time calculation to insert. # source code: https://stackoverflow.com/questions/20288770/how-to-use-bulk-api-to-store-the-keywords-in-es-by-using-python actions = [ "_index": "index8", "_type": "_doc", "_id": j, "_source": { "any":"data" + str(j), "timestamp": datetime.now()} for j in range(0, 2000)

上面的代码生成一个数组。数组中的项如下:

[{'_index': 'index8',
  '_type': '_doc',
  '_id': 0,
  '_source': {'any': 'data0',
   'timestamp': datetime.datetime(2021, 9, 8, 9, 32, 39, 247186)}},

如上所示,我们创建了2千个数据。在使用上面的时候,我们必须注意到的是,在 action 的定义中,我们可以定义 _op_type 字段。我们可以参考链接 https://elasticsearch-py.readthedocs.io/en/master/helpers.html。我们可以像如下的方式这样添加 _op_type 字段以实现不同的操作:

'_op_type': 'delete', '_index': 'index-name', '_id': 42, '_op_type': 'update', '_index': 'index-name', '_id': 42, 'doc': {'question': 'The life, universe and everything.'}

在默认的情况下,它的操作是 index。接下来,我们来计算一下批量导入这些数据所需要的时间到底是多少。

我们打入如下的代码:

st = time.time()
helpers.bulk(es, actions)
end = time.time()
print("total time:", end-st)

 上面显示整个写入2千个数据所需的时间是 0.52 秒左右。我们可以看到是非常地高效。

接下来,我们使用另外一种方法来导入数据。我们通过每次写入一个数据的方法来进行写入。这样需要请求1万次才可以把1万个数据写入:

Insertion iteratively st = time.time() for j in range(0,2000): doc = { "any":"data" + str(j), "timestamp": datetime.now() es.index(index="test8", doc_type="_doc", id=j, body=doc) end = time.time() print("total time", end-st)

在 Kibana 中,我们发现 test8 索引的 count 是一直在增加,但是写入的速度是非常慢的:

等写完 2000 个数据,我们再看一下总的写入时间:

从上面,我们可以看出来总共需要 193 秒的时间。这个差距是非常之大的。

接下来,我们使用 helper 中的 scan 来获取大量的数据:

Scanning over large data #source code: https://stackoverflow.com/questions/47722238/python-elasticsearch-helpers-scan-example results = helpers.scan(es, index="chapter8",doc_type="doc", query={"query": {"match_all": {}}}) for item in results: print(item['_id'], item['_source'])

我们发现这个 scan 的速度是非常之快的。几乎在咋眼之间就完成了。

近几个月来,人们对 ChatGPT 充满了热情,这是一种由 OpenAI 创建的开创性人工智能模型。但 ChatGPT 到底是什么?基于强大的 GPT 架构,ChatGPT 旨在理解文本输入并生成类似人类的响应。GPT 代表 “Generative Pre-trained Transformer”。Transformer 是一种顶尖模型架构,彻底改变了自然语言处理 (NLP) 领域。 在之前的文章 “”,我们详细描述了 Elastic RUM (Real User Monitor)。在今天的文章中,我将详细一步一步地对该文章进行演示以便大家也能和我一样进行展示。和。通常,这四个组件可以通过两种方式协同工作。边缘机器上的 APM 代理将数据发送到集中托管的 APM 集成:在本演示中,我们的边缘设备也即 macOS。它通过 Elastic APM agent 采集信息,并传输到一个中央的 APM 集成。在本次的演示中,我将使用最新的 Elastic Stack 8.6.2 来进行展示。 Elasticsearch 无疑是是目前世界上最为流行的大数据搜索引擎。根据 DB - Engines 的统计,Elasticsearch 雄踞排行榜第一名,并且市场还在不断地扩大:能够成为一名 Elastic 认证工程师也是很多开发者的梦想。这个代表了 Elastic 的最高认证,在业界也得到了很高的认知度。得到认证的工程师,必须除了具有丰富的 Elastic Stack 知识,而且必须有丰富的操作及有效的解决问题的能力。拥有这个认证证书,也代表了个人及公司的荣誉。针对个人的好处是,你可以.. 您们好,我是Elastic的刘晓国。如果大家想开始学习Elastic的话,那么这里将是你理想的学习园地。在我的博客几乎涵盖了你想学习的许多方面。在这里,我来讲述一下作为一个菜鸟该如何阅读我的这些博客文章。我们可以按照如下的步骤来学习:1)Elasticsearch简介:对Elasticsearch做了一个简单的介绍2)Elasticsearch中的一些重要概念:cluster, n.......................................................... 在这篇文章中,我将会把我写的有些内容录制成视频,供大家参考。希望对大家有所帮助。优酷的视频频道地址在这里。Elastic 简介及Elastic Stack 安装:优酷,腾讯 Elastic Stack docker 部署:优酷,腾讯 Elasticsearch中的一些重要概念(Cluster/Shards/Replica/Document/Type/Index):优酷,腾讯 开始使用El............... Elasticsearch是一个非常强大的搜索引擎。它目前被广泛地使用于各个IT公司。Elasticsearch是由Elastic公司创建并开源维护的。它的开源代码位于https://github.com/elastic/elasticsearch。同时,Elastic公司也拥有Logstash及Kibana开源项目。这个三个开源项目组合在一起,就形成了 ELK软件栈。他们三个共同形成了一个强大的... 是一种开源 (Apache 2.0) 规范,是在 Elastic 用户社区的支持下开发的,用于定义在 Elasticsearch 中存储事件数据时要使用的一组通用字段。ECS 的目标是支持并鼓励 Elasticsearch 用户规范化他们的事件数据,以便他们能够更好地分析、可视化和关联事件中表示的数据。ECS是 Elastic 可观察性和安全性解决方案的基础,是一种经过验证且被广泛采用的模式,自2019 年成立以来多年来不断发展壮大。 在我之前的许多文章中,我已经详细地描述了如何配置如下的管道:在实际的使用中,Elastic Stack 中的各个组件极有可能不在同样的一个机器上。我们该如何保证数据在传输过程中的安全呢?我们需要确保在上图所示的每一个连接都是安全的。在今天的教程中,我将详述如何在考虑安全的情况下设置 Filebeat、Logstash、Elasticsearch 和 Kibana。我将在 Ubuntu OS 22.04 上安装最新的 Elastic Stack 8.7.0。 在今天的文章中,我来详述如何部署 Elastic Stack,并使用文章中的示例代码来进行展示。为了展示方便,在今天的展示中,我将所有的组件都安装到同一台机器 macOS 上。它的 private IP 地址为 192.168.0.3。和。通常,这四个组件可以通过两种方式协同工作。边缘机器上的 APM 代理将数据发送到集中托管的 APM 集成:​在本演示中,我们的边缘设备也即 macOS。 Elasticsearch 整合机器学习强化排序, 介绍如何将机器学习预测能力迁移至 ES 内部,增强排序能力, 构建一个高性能,分布式搜排一体系统,并通过落地更多复杂模型特征和更深的计算,为业务带来新的增长点,我们将 LR -> 树模型完成全量排序,给核心业务带来 1.2% 的 ab 增长。我们团队主要负责哈啰四轮司乘匹配的召回排序。在顺风车司乘匹配场景中,司机发单后系统会从订单池中筛选展示合适的乘客订单,促进司机发单到完单,带来营收。整个过程排序是一个非常关键的环节。 我们研究了使用 OpenTelemetry 和 Elastic 监控 ChatGPT。ChatGPT 是一种全球现象,毫无疑问,它会不断发展壮大,很快每个人都会使用它。因为获得响应可能很慢,所以人们能够理解使用此服务的任何代码的性能至关重要。还有成本问题,因为了解这项服务是否正在侵蚀你的利润以及你所要求的是否对你的业务有利可图非常重要。在当前的经济环境下,我们必须密切关注盈利能力。在此处查看此解决方案的代码。请随意使用 “monitor” 库来检测你自己的 OpenAI 代码。 在今天的文章中,我将展示如何使用另外一种过滤器根据类型来保留或者移除一些分词。保留类型分词过滤器能够跨类型保留或删除分词。让我们想象一下项目描述字段,通常这个字段接收带有单词和数字的文本。为所有文本生成分词可能没有意义,为了避免这种情况,我们将使用 Keep 类型分词过滤器。 在这个互联网和信息时代,在应用程序和应用程序中启用基于位置的搜索是一个普遍的要求。基于位置的搜索根据邻近度获取场所或地点,例如附近的餐馆、半径不超过 1 公里的待售房屋等。我们还使用基于位置的搜索来查找前往某个地方或兴趣点的方向。好消息是地理空间支持是 Elasticsearch 中的一等公民。专用数据类型允许我们定义用于索引地理空间数据的模式,从而实现集中搜索。Elasticsearch 提供一组地理空间搜索查询,例如和,具体取决于给定的用例。这些查询足以满足大多数用例。 在我之前的文章 “” 我详述了如何使用已有的处理器来把文档归类到所需要的和文档日期相关的的索引中去。比如,我们想把 2023 年 4 月的所有文档写入到 my-index-2023-04-01 这个索引名称中去。这个处理器很好地解决了在很多情况下,我们需要把当月或者当年的索引放到我们需要的以文档时间戳相关索引名称中,这样便于以后的管理及搜索。在今天的文章中,我们将以另外一种方式来实现同样的方案。 Elastic 技术社区是植根于 Elastic Stack 技术栈的各种开源项目,如果没有这些开放源代码项目的普及,也就不会有大数据搜索的这一细分领域了。国内的开发者们也分享了很多关于开源项目的信息,希望大家能继续与上游的开源项目保持紧密的合作关系,让我们在该领域里一起创新,一起成长。希望所有技术实践者们都能够找到适合自己的交流和分享方式,同时社区也呼唤更多的技术牛人们,踊跃的走向 Meetup 的分享讲台,在分享中不断精进成长,将来也走上 Elastic 开发者大会的讲台。 有时,我们无法控制数据本身,我们需要管理数据的结构,甚至需要在摄取数据时处理字段名称。但有趣的是,我对摄取管道尝试了很多不同的方法,但我找不到解决方案。如你所见,错误与我们上面得到的错误相同。但是,这并不意味着你不能在文档中的任何地方使用这些字段名称。例如,你想使用 Logstash 移动该数据。因此,当你尝试使用 Logstash 摄取它时,你将收到以下错误。Elasticsearch 有一些保留的字段名称,你不能在文档中使用这些名称。究其原因,在上面的 _id 它不是在 root node 下的字段。 我们大多数人已经熟悉 Elastic 产品。在此博客中,我们将逐步介绍配置 Logstash 以使用多个管道摄取和处理数据的步骤。Logstash 是一种开源数据处理管道,可让你摄取、转换和输出数据。它是从各种来源收集和处理大量数据的强大工具,可用于管理和分析日志、指标和其他类型的数据。更多关于 Logstash 的介绍,请阅读我之前的文章 “关于 Logstash 如何处理多个 inputs,请阅读之前的文章 “ 此版本中的另一个新功能是 Elastic Web Crawler 现在支持自定义抓取的编程调度。此功能使你能够注册具有不同配置的多个计划,从而允许你覆盖爬虫的 “默认” 计划配置。例如,你可以为不同的网站安排在不同的时间或间隔进行抓取,或者为内容经常变化的页面安排更频繁的抓取。作为 8.7 中的全新功能,Web 和搜索分析客户端允许你使用 Elastic 通过网站、应用程序和搜索分析来捕获、分析和可视化用户行为,从而为搜索相关性优化和网站改进提供信息。 Elastic Stack 用于大量用例,从操作日志和指标分析到企业和应用程序搜索。 确保你的数据可扩展、持久且安全地传输到 Elasticsearch 非常重要,尤其是对于任务关键型环境。本文档的目的是强调 Logstash 最常见的架构模式以及如何随着部署的增长而有效扩展。 重点将围绕操作日志、指标和安全分析用例,因为它们往往需要更大规模的部署。 此处提供的部署和扩展建议可能因你自己的要求而异。