作者:来自 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 的文件上传功能,这足以进行快速测试。
- 首先,下载数据集 https://github.com/elastic/eland/blob/main/tests/flights.json.gz 并解压缩 (gunzip flights.json.gz)。
- 接下来,在 Kibana 的搜索栏中输入 “File Upload” 并导入 flights.json 文件。
- Kibana 将向你显示结果字段,例如,“Cancelled” 被检测为布尔值。单击 “Import”。
- 在下一个屏幕上,选择 “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()
如果你在笔记本中运行此代码,结果将是下表:
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-01T10: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 有更多使用相同数据集的示例,参考文档列出了所有支持的操作。
准备好自己尝试一下了吗?开始免费试用。
Elasticsearch 集成了 LangChain、Cohere 等工具。加入我们的高级语义搜索网络研讨会,构建你的下一个 GenAI 应用程序!
原文:Eland on Elasticsearch Serverless: Searching data with Eland — Search Labs