在 Elasticsearch Serverless 上使用 Eland

2024年10月9日   |   by mebius

作者:来自 ElasticQuentin Pradet

%title插图%num

本博客将向你展示如何使用 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”,它将提供同步你训练过的模型。

%title插图%num

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

%title插图%num

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

%title插图%num

在这个测试句中,模型成功地将 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” 索引。

%title插图%num

连接到 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()

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

AvgTicketPrice Cancelled Carrier Dest DestAirportID DestCityName DestCountry DestLocation.lat DestLocation.lon DestRegion Origin OriginAirportID OriginCityName OriginCountry OriginLocation.lat OriginLocation.lon OriginRegion OriginWeather dayOfWeek timestamp
882.982662 False Logstash Airways Venice Marco Polo Airport VE05 Venice IT 45.505299 12.3519 IT-34 Cape Town International Airport CPT Cape Town ZA -33.96480179 18.60169983 SE-BD Clear 0 2018-01-01T18:27:00
730.041778 False Kibana Airlines Xi’an Xianyang International Airport XIY Xi’an CN 34.447102 108.751999 SE-BD Licenciado Benito Juarez International Airport AICM Mexico City MX 19.4363 -99.072098 MX-DIF Damaging Wind 0 2018-01-01T05:13:00
841.265642 False Kibana Airlines Sydney Kingsford Smith International Airport SYD Sydney AU -33.94609833 151.177002 SE-BD Frankfurt am Main Airport FRA Frankfurt am Main DE 50.033333 8.570556 DE-HE Sunny 0 2018-01-01T00:00:00
181.694216 True Kibana Airlines Treviso-Sant’Angelo Airport TV01 Treviso IT 45.648399 12.1944 IT-34 Naples International Airport NA01 Naples IT 40.886002 14.2908 IT-72 Thunder & Lightning 0 2018-01-01T1tgcode0:33:28
552.917371 False Logstash Airways Luis Munoz Marin International Airport SJU San Juan

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

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

输出以下内容:

DistanceKilometers AvgTicketPrice
sum 9.261629e+07 8.204365e+06
min 0.000000e+00 1.000205e+02
std 4.578614e+03 2.664071e+02

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

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

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

文章来源于互联网:在 Elasticsearch Serverless 上使用 Eland

相关推荐: OpenTelemetry 演示与 OpenTelemetry 的 Elastic 分发

作者:来自 ElasticRoger Coll 了解 Elastic 如何致力于支持用户使用 OpenTelemetry。探索我们对 OpenTelemetry Demo 的公开部署,并了解 Elastic 的解决方案如何增强你的可观察性体验。 最近,Elas…

Tags: , , , , ,