在 Elasticsearch Serverless 上使用 Eland

1032 篇文章 596 订阅

作者:来自 Elastic Quentin Pradet

本博客将向你展示如何使用 Eland 将机器学习模型导入 Elasticsearch Serverless,然后如何使用类似 Pandas 的 API 探索 Elasticsearch。

Elasticsearch Serverless 中的 NLP

自 Elasticsearch 8.0 起,可以直接从 Elasticsearch 使用 NLP 机器学习模型。虽然某些模型例如 ELSER(用于英语数据)或 E5(用于多语言数据))可以直接从 Kibana 部署,但所有其他兼容的 PyTorch 模型都需要使用 Eland 上传。

自 Eland 8.14.0 起,eland_import_hub_model 完全支持 Serverless。要获取连接详细信息,请在 Kibana 中打开你的 Serverless 项目,选择 “cURL” 客户端,创建 API 密钥,然后导出环境变量:

export ES_URL="https://[...].elastic.cloud:443"
export API_KEY="..."

然后你可以在运行 eland_import_hub_model 时使用这些变量:

$ docker run -it --rm --network host \
    docker.elastic.co/eland/eland \
    eland_import_hub_model \
      --url $ES_URL \
      --es-api-key $API_KEY \
      --hub-model-id elastic/distilbert-base-cased-finetuned-conll03-english \
      --task-type ner

接下来,在 Kibana 中搜索 “Trained Models”,它将提供同步你训练过的模型。

完成后,你将获得部署模型的选项:

不到一分钟后,你的模型就应该部署了,你将能够直接从 Kibana 对其进行测试。

在这个测试句中,模型成功地将 Joe 识别为 “Person”,并将 “Reunion Island” 识别为地点,概率很高。

有关将 Eland 用于机器学习模型(包括 scikit-learn、XGBoost 和 LightGBM,本文未介绍)的更多详细信息,请考虑阅读详细的在 Elastic 中访问机器学习模型博客文章并参考 Eland 文档

Eland 中的数据框

Eland 的另一个主要功能是使用类似 Pandas 的 API 探索 Elasticsearch 数据。

摄取测试数据

首先,让我们将一些测试数据索引到 Elasticsearch。我们将使用一个假的航班数据集。虽然可以使用 Python Elasticsearch 客户端上传,但在本文中,我们将使用 Kibana 的文件上传功能,这足以进行快速测试。

  1. 首先,下载数据集 https://github.com/elastic/eland/blob/main/tests/flights.json.gz 并解压缩 (gunzip flights.json.gz)。
  2. 接下来,在 Kibana 的搜索栏中输入 “File Upload” 并导入 flights.json 文件。
  3. Kibana 将向你显示结果字段,例如,“Cancelled” 被检测为布尔值。单击 “Import”。
  4. 在下一个屏幕上,选择 “flights” 作为索引名称,然后再次单击 “Import”。

如下面的屏幕截图所示,你应该看到 13059 份文档已成功纳入 “flights” 索引。

连接到 Elasticsearch

现在我们有了要搜索的数据,让我们设置 Elasticsearch Serverless Python 客户端。(虽然我们可以使用主客户端,但 Serverless Elasticsearch Python 客户端通常更易于使用,因为它仅支持 Elasticsearch Serverless 功能和 API。)从 Kibana 主页,你可以选择 Python,它将解释如何安装 Elasticsearch Serverless Python 客户端、创建 API 密钥以及在你的代码中使用它。你应该得到以下代码:

from elasticsearch_serverless import Elasticsearch

client = Elasticsearch(
    "https://[...].es.eu-west-1.aws.elastic.cloud:443",
    api_key="your_api_key"
)

print(client.info())

使用 Eland 搜索数据

最后,假设上述代码有效,我们可以开始使用 Eland。使用 python -m pip install eland>=8.14 安装后,我们可以开始探索我们的航班数据集。

import eland as ed
from elasticsearch_serverless import Elasticsearch

client = Elasticsearch("https//...", api_key="...)
df = ed.DataFrame(client, es_index_pattern="flights")
df.head()

如果你在笔记本中运行此代码,结果将是下表:

AvgTicketPriceCancelledCarrierDestDestAirportIDDestCityNameDestCountryDestLocation.latDestLocation.lonDestRegion...OriginOriginAirportIDOriginCityNameOriginCountryOriginLocation.latOriginLocation.lonOriginRegionOriginWeatherdayOfWeektimestamp
882.982662FalseLogstash AirwaysVenice Marco Polo AirportVE05VeniceIT45.50529912.3519IT-34...Cape Town International AirportCPTCape TownZA-33.9648017918.60169983SE-BDClear02018-01-01T18:27:00
730.041778FalseKibana AirlinesXi'an Xianyang International AirportXIYXi'anCN34.447102108.751999SE-BD...Licenciado Benito Juarez International AirportAICMMexico CityMX19.4363-99.072098MX-DIFDamaging Wind02018-01-01T05:13:00
841.265642FalseKibana AirlinesSydney Kingsford Smith International AirportSYDSydneyAU-33.94609833151.177002SE-BD...Frankfurt am Main AirportFRAFrankfurt am MainDE50.0333338.570556DE-HESunny02018-01-01T00:00:00
181.694216TrueKibana AirlinesTreviso-Sant'Angelo AirportTV01TrevisoIT45.64839912.1944IT-34...Naples International AirportNA01NaplesIT40.88600214.2908IT-72Thunder & Lightning02018-01-01T10:33:28
552.917371FalseLogstash AirwaysLuis Munoz Marin International AirportSJUSan Juan

你还可以运行更复杂的查询,例如聚合:

df[["DistanceKilometers", "AvgTicketPrice"]].aggregate(["sum", "min", "std"])

输出以下内容:

DistanceKilometersAvgTicketPrice
sum9.261629e+078.204365e+06
min0.000000e+001.000205e+02
std4.578614e+032.664071e+02

文档中的 demo notebook 有更多使用相同数据集的示例,参考文档列出了所有支持的操作。

准备好自己尝试一下了吗?开始免费试用
Elasticsearch 集成了 LangChain、Cohere 等工具。加入我们的高级语义搜索网络研讨会,构建你的下一个 GenAI 应用程序!

原文:Eland on Elasticsearch Serverless: Searching data with Eland — Search Labs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值