Elastic Search:打造语义搜索体验

概述


装载数据

创建 Elastic Cloud 帐户

开始为期 14 天的试用。访问 cloud.elastic.co 并创建帐户后,请跟随下面的步骤学习,了解如何在我们全球 50 多个支持区域中的任何一个启动您的第一个 Elastic Stack。

如果单击“Edit setting”(编辑设置),您可以选择云服务提供商,包括 AWS、Microsoft Azure 或 Google Cloud。选择云服务提供商后,就可以选择相关区域。接下来,您可以在几个不同的硬件配置文件之间进行选择,以便更好地定制部署以满足您的需求。另外,最新版本的 Elastic 已经为您预先选择好了。

在创建部署时,系统将为您提供用户名和密码。请务必复制或下载此信息,因为在安装集成时将需要用到它。

使用 Elastic 网络爬虫采集数据

现在您已经创建了自己的部署,接下来就可以将数据采集到 Elastic 中了。我们可以使用 Elastic 的网络爬虫来进行数据采集。首先,您需要选择磁贴:Build a semantic search experience(打造语义搜索体验)。

接下来,如要设置语义搜索,您将会看到一个页面,在此页面上,您可以使用下面任一项开始:

  • Elastic Learned Sparse Encoder
  • 矢量搜索
  • NLP 扩充

所有这些功能及更多内容都属于 Elasticsearch 相关性引擎 (ESRE)。

在本指南中,我们会同时使用下面两种方法来设置语义搜索:Elastic Learned Sparse Encoder 和矢量搜索。

注意:如果您刚开始接触语义搜索并且想搜索文本,则应该首先尝试 Elastic Learned Sparse Encoder 指南。kNN 矢量搜索指南可能更适合符合下列某些条件的用户:

  • 能够访问数据科学技能集
  • 已确定内置的 Elastic Learned Sparse Encoder 语义搜索模型不适用于他们的用例
  • 在对比嵌入模型方面拥有经验,可能的话,最好还能够微调 ML 模型
  • 理解快速的 kNN 搜索可能需要大量的 RAM 资源

如果您已准备好开始,就选择您喜欢的方法来构建 AI 搜索驱动型应用程序吧。

对于这两种方法,您开始时都需要选择 Create an index (创建索引)。从这里,您可以选择 web crawler(网络爬虫)来开始采集数据。

如要设置 web crawler(网络爬虫),请查看这个介绍视频,也可以按照下面的说明操作:

现在创建一个索引。在本指南中,我们会采集整个 elastic.co 上面的博文。

Web crawler search index

为您的索引命名完毕后,选择 Create index(创建索引)。接下来,您需要 Validate Domain(验证域),然后选择 Add domain(添加域)。

在右下角添加完域之后,您需要选择 Edit(编辑),以便您可以在需要时添加子域。

Add a domain to your index然后您需要选择 Crawl rules(爬取规则)并添加您的爬取规则,如下面所示。*

Manage domains

*由于有一些网页会链接到您想要爬取的网页上,所以您应该添加更多规则,以禁用这些链接以及任何其他链接。

 

接下来,当您稍后选择字段时,某些字段会超过 512 个词元的计数,例如 body_content。您应该利用 Extraction rules(提取规则)来仅筛选出博客中相关的部分。

选择 Extraction rules(提取规则)后,点击 Add content extraction rule(添加内容提取规则)。

接下来,在 Rule description(规则描述)中为该规则起一个名字,以便其他人理解这一规则会提取什么内容。在本指南中,我们将其命名为“main”(主要)。

现在,选择 Apply to all URLs(应用至所有 URL),然后选择 Add content fields(添加内容字段),就会出现一个浮出控件。浮出控件出现时,进行填写并选择下列条件。

  • Document field(文档字段):
    • Field name(字段名称):main(主要)
  • Source(来源):
    • Extract content from(提取内容的来源):HTML element(HTML 元素)
    • CSS selector or XPath expression(CSS 选择器或 XPath 表达式):main(主要)
  • Content(内容):
    • Use content from(所用内容的来源):Extracted Value(所提取值)
    • Store extracted content as(将提取的内容存储为):A string(字符串)

填写完这些条件后,点击 Save(保存),然后点击 Save rule(保存规则)。


使用 Elasticsearch 和 ESRE

使用 Elastic Learned Sparse Encoder 采集和搜索您的数据

如果您已经查看了上面针对矢量搜索入门所推荐的条件,并且这是您喜欢的方法,则导航至左侧的 Search your data using kNN vector search(使用 kNN 矢量搜索来搜索您的数据)并遵照说明进行操作。

如果您不喜欢这种方法,更愿意使用 Elastic Learned Sparse Encoder(Elastic 的开箱即用型语义搜索模型),则请查看下面的说明。

如要使用这种方法,您需要选择 Pipelines(管道)和 Unlock your custom pipelines(解锁您的自定义管道),方法是选择顶部的 Copy and customize(复制并自定义)。接下来,在 Machine Learning Inference Pipelines(Machine Learning 推理管道)下,选择 Deploy(部署),从而下载模型并将其安装到您的 Elasticsearch 部署中。

模型部署完毕后,选择 Start single-threaded(开始单线程),然后选择 + Add inference Pipeline(+ 添加推理管道)。接下来您需要按照下面操作:

  1. 选择新的或已有的管道
  2. 给它起个名字
  3. 最后,在 Select a trained ML Model(选择一个受训 ML 模型)下拉列表中,选择 ELSER Text Expansion(ELSER 文本扩展),然后点击 Continue(继续)。

现在,您需要选择您想针对哪些字段应用 ELSER text expansion(ELSER 文本扩展)。选择“title”(标题)和“main”(主要)作为“Source field”(来源字段),然后点击 Add(添加)

然后,单击 Continue(继续)。

跳过 Test your pipeline results(测试您的管道结果)步骤,跳过方法是点击 Continue(继续),然后再点击 Create pipeline(创建管道)。

现在您已经创建了自己的管道,接下来选择右上角的 Crawl(爬取),然后选择 Crawl all domains on this index(爬取该索引上的所有域)。

现在您就可以搜索需要查找的信息了。有两种建议的方法来进行搜索:

  • 使用 Dev Tools(开发工具)
  • Search Application(搜索应用程序)功能用作您的应用程序的一个终端

何时使用每种方法:

  • 如果您是(为您的网络应用程序)实施搜索的开发者,则您应该使用 Dev Tools(开发工具)来测试并优化来自所索引数据的搜索结果。
  • 如果您想创建一个搜索终端,且想通过此终端从自己的应用程序发送搜索请求,并将搜索结果返回到应用程序中,则您应该使用 Search Application(搜索应用程序)功能。

请查看下面的两个简短视频,简单了解一下如何使用 Dev Tools(开发工具)和 Search Application(搜索应用程序)功能。您还可以通过观看这个介绍视频进行学习。


后续步骤

感谢您抽出时间利用 Elastic Cloud 来为您的数据设置语义搜索。当您开始使用 Elastic 时,您需要了解在整个环境中部署时作为用户应管理的一些操作、安全性和数据组件