语义搜索

编辑

语义搜索是一种搜索方法,它可以帮助您根据搜索查询的意图和上下文含义查找数据,而不是基于查询词的匹配(词汇搜索)。

Elasticsearch 使用自然语言处理 (NLP) 和向量搜索提供各种语义搜索功能。使用 NLP 模型可以让您从文本中提取文本嵌入。嵌入是提供文本数值表示的向量。具有相似含义的内容片段具有相似的表示。

Overview of semantic search workflows in Elasticsearch

您有几种在 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 工作流,它非常简单。如果不是,则取决于您正在使用的嵌入类型。

要查询的字段类型 要使用的查询 备注

semantic_text

semantic

semantic_text 字段会在索引时和查询时为您处理生成嵌入。

sparse_vector

sparse_vector

sparse_vector 查询可以为您生成查询嵌入,但您也可以提供自己的嵌入。您必须在索引时提供嵌入。

dense_vector

knn

knn 查询可以为您生成查询嵌入,但您也可以提供自己的嵌入。您必须在索引时提供嵌入。

如果您希望 Elasticsearch 在索引时和查询时都生成嵌入,请使用 semantic_text 字段和 semantic 查询。如果您想使用自己的嵌入,请使用 sparse_vectordense_vector 字段类型以及相关的查询,具体取决于您用于生成嵌入的 NLP 模型。

要以最简单的方式在 Elastic Stack 中执行语义搜索,请参阅 semantic_text 端到端教程。

阅读更多

编辑