语义搜索
编辑语义搜索
编辑语义搜索是一种搜索方法,它可以帮助您根据搜索查询的意图和上下文含义查找数据,而不是基于查询词的匹配(词汇搜索)。
Elasticsearch 使用自然语言处理 (NLP) 和向量搜索提供各种语义搜索功能。使用 NLP 模型可以让您从文本中提取文本嵌入。嵌入是提供文本数值表示的向量。具有相似含义的内容片段具有相似的表示。
您有几种在 Elastic Stack 中使用 NLP 模型的选项
- 使用
semantic_text
工作流(推荐) - 使用推理 API 工作流
- 直接在 Elasticsearch 中部署模型
请参阅本节以选择您的工作流。
您也可以将自己的嵌入作为向量存储在 Elasticsearch 中。请参阅本节,以获取有关语义搜索应使用哪种查询类型的指导。
在查询时,Elasticsearch 可以使用相同的 NLP 模型将查询转换为嵌入,使您能够找到具有相似文本嵌入的文档。
选择语义搜索工作流
编辑semantic_text
工作流
编辑在 Elastic Stack 中使用 NLP 模型的最简单方法是通过semantic_text
工作流。我们建议使用此方法,因为它抽象了很多手动工作。您只需创建一个推理端点和一个索引映射即可开始摄取、嵌入和查询数据。无需定义模型相关的设置和参数,也无需创建推理摄取管道。请参阅创建推理端点 API文档,获取支持的服务的列表。
使用 semantic_text
的语义搜索教程向您展示了端到端的流程。
推理 API 工作流
编辑推理 API 工作流更加复杂,但可以更好地控制推理端点配置。您需要创建一个推理端点,提供各种模型相关的设置和参数,定义索引映射,并使用适当的设置设置推理摄取管道。
使用推理 API 的语义搜索教程向您展示了端到端的流程。
模型部署工作流
编辑您也可以在不使用推理端点的情况下手动在 Elasticsearch 中部署 NLP。这是在 Elastic Stack 中执行语义搜索的最复杂和劳动密集型的工作流。您需要从支持的密集和稀疏向量模型的列表中选择一个 NLP 模型,使用 Eland 客户端部署它,创建索引映射,并设置一个合适的摄取管道以开始摄取和查询数据。
使用部署在 Elasticsearch 中的模型进行语义搜索教程向您展示了端到端的流程。
使用正确的查询
编辑构建正确的查询对于语义搜索至关重要。您使用的查询以及您在查询中定位的字段取决于您选择的工作流。如果您使用 semantic_text
工作流,它非常简单。如果不是,则取决于您正在使用的嵌入类型。
要查询的字段类型 | 要使用的查询 | 备注 |
---|---|---|
|
||
|
||
|
如果您希望 Elasticsearch 在索引时和查询时都生成嵌入,请使用 semantic_text
字段和 semantic
查询。如果您想使用自己的嵌入,请使用 sparse_vector
或 dense_vector
字段类型以及相关的查询,具体取决于您用于生成嵌入的 NLP 模型。
要以最简单的方式在 Elastic Stack 中执行语义搜索,请参阅 semantic_text
端到端教程。
阅读更多
编辑-
教程
-
交互式示例
elasticsearch-labs
存储库包含许多以可执行 Python 笔记本形式提供的交互式语义搜索示例,使用 Elasticsearch Python 客户端- 使用 ELSER 进行语义搜索(使用模型部署工作流)
-
使用
semantic_text
进行语义搜索
-
博客