Elasticsearch:跨数据库和业务系统搜索
概述
Elasticsearch 简介
Elasticsearch 从文本搜索的业界标准 BM25 开始,提供多种搜索技术。它还提供由 AI 模型驱动的语义搜索,根据上下文和意图优化结果。
在本指南中,您将学习如何将数据从外部数据库同步到 Elasticsearch,并使用语义搜索轻松搜索数据库。
装载数据
如何采集和扩充数据来打造搜索体验
Elasticsearch 包含广泛的数据采集功能,可帮助解决您面临的业务挑战。观看此网络研讨会:
- 学习如何将异构数据汇集一处来打造搜索体验。
- 理解用于处理特定类型数据的各种工具,例如 Open Crawler、连接器目录、数据和 Machine Learning 推理管道等等。
- 观看使用客户支持数据集进行的现场演示。
创建 Elastic Cloud 项目
开始 14 天试用。一旦您访问 cloud.elastic.co 并创建帐户,请按照以下步骤启动您的第一个 Elasticsearch Serverless 项目。
首先,选择 Elasticsearch。
创建一个通用项目。将其命名为"我的项目",然后单击创建项目。
现在您的 Elasticsearch Serverless 项目将会被创建。接下来,创建您的第一个 Elasticsearch 索引并将其命名为“my-index。”单击 创建我的索引。
接下来,您可以向 Elasticsearch 添加第三方数据源。在此示例中,我们有一个 MongoDB 数据库,其中包含约 150000 个视频游戏标题以及“id”、“name”、“description”和“date”列。我们将把这个数据库同步到 Elasticsearch,并且作为额外的步骤,我们将为其添加语义搜索功能。
让我们用相同的字段名和额外的“description_semantic”创建一个基本的索引映射,其中将包含用于语义搜索的向量。打开开发工具,粘贴以下命令更新索引映射:
PUT my-index/_mappings
{
"properties": {
"name": {
"type": "text"
},
"description": {
"type": "text",
"copy_to": "description_semantic"
},
"description_semantic": {
"type": "semantic_text"
},
"date": {
"type": "date"
}
}
}
从现有数据库获取数据
您已准备好连接到现有数据库。单击连接器和 + 自管型连接器。
本指南将使用 MongoDB 数据库。从连接器类型列表中选择 MongoDB。
请按照说明使用 Docker 部署自托管连接器。您将需要创建一个 config.yml 文件。请注意,连接器和 Elasticsearch 上的 api_key 是相同的。例如:
连接器:
-
connector_id: KPIDOZUBfX6AM3jXM_g7
service_type: mongodb
api_key: RGZMUU9KVUJmWDZBTTNqWFRQano6R3RRb01jR2kxRkNqWTA5eGtSa3NFZw==
elasticsearch:
host: https://my-project-cc67ad.es.us-east-1.aws.elastic.cloud:443
api_key:RGZMUU9KVUJmWDZBTTNqWFRQano6R3RRb01jR2kxRkNqWTA5eGtSa3NFZw==
然后,使用以下命令启动自托管连接器:
docker run -v "./connectors-config:/config"--tty --rm docker.elastic.co/enterprise-search/elastic-connectors:8.17.0 /app/bin/elastic-ingest -c /config/config.yml
接下来,将配置添加到 MongoDB 数据库,然后单击下一步。
选择必须同步数据的索引——在本例中它是“my-index”,即我们之前创建的索引。单击同步。
就是这么简单!连接器将遍历数据库,并将文档同步到“my-index”。主 Connectors(连接器)页面将显示当前状态。
连接器还可以配置为定期将数据库同步到 Elasticsearch。如要配置,请单击连接器,然后单击调度,选择“每小时”,然后单击“保存”。现在,只要自托管连接器正常运行,内容就会在每小时开始时同步。
使用 Elasticsearch
查询数据
现在有趣的部分开始了。前往构建 > 开发工具(我们用来更新索引映射的同一个部分)并发出以下查询,这将对“name”和“description”字段进行全文本搜索:
GET my-index/_search
{
"query": {
"multi_match": {
"query": "adventure game on a desert island",
"fields": [
"name",
"description"
]
}
}
}
由于索引现在有了一个 semantic_text 字段,因此可以像这样进行查询:
GET my-index/_search
{
"query": {
"semantic": {
"field": "description_semantic",
"query": "game about ghosts in medieval times"
}
}
}
您刚刚了解了如何将数据从外部数据库同步到 Elasticsearch 并在其上添加语义搜索!
后续步骤
感谢您花时间学习如何在 Elastic Cloud 中使用 Python 创建第一个搜索查询。当您开始使用 Elastic 之旅时,请了解在跨环境部署时,作为用户应管理的一些操作、安全和数据组件。
准备好开始了吗?赶快在 Elastic Cloud 上启动一个免费的 14 天试用吧,或者尝试这些 15 分钟的搜索 AI 101 实践学习。