使用 Azure AI 搜索和 Azure Cosmos DB for NoSQL 来搜索数据

Azure AI 搜索将搜索引擎作为一项服务与和人工智能功能的深度集成相结合,来丰富搜索索引中的信息。

在此实验中,你将构建一个 Azure AI 搜索索引,该索引会自动为 Azure Cosmos DB for NoSQL 容器中的数据编制索引,并使用 Azure 认知服务翻译器功能来丰富数据。

创建 Azure Cosmos DB for NoSQL 帐户

Azure Cosmos DB 是一项基于云的 NoSQL 数据库服务,它支持多个 API。 在首次预配 Azure Cosmos DB 帐户时,可以选择希望该帐户支持的 API(例如 Mongo API 或 NoSQL API)。 完成 Azure Cosmos DB for NoSQL 帐户预配后,可以检索终结点和密钥,并使用它们通过 Azure SDK for .NET 或所选择的任何其他 SDK 连接到 Azure Cosmos DB for NoSQL 帐户。

  1. 在新的 Web 浏览器窗口或选项卡中,导航到 Azure 门户 (portal.azure.com)。

  2. 使用与你的订阅关联的 Microsoft 凭证登录到门户。

  3. 选择“+ 创建资源”,搜索“Cosmos DB”,然后使用以下设置创建新的“Azure Cosmos DB for NoSQL”帐户资源,并将所有其余设置保留为默认值:

    设置
    订阅 你的现有 Azure 订阅
    资源组 选择现有资源组,或创建新资源组
    帐户名 输入全局唯一名称
    位置 选择任何可用区域
    容量模式 无服务器

    📝 你的实验室环境可能存在阻止你创建新资源组的限制。 如果是这种情况,请使用现有的预先创建的资源组。

  4. 等待部署任务完成,然后继续执行此任务。

  5. 转到新创建的 Azure Cosmos DB 帐户资源,并导航到“键”窗格。

  6. 此窗格包含从 SDK 连接到帐户所需的连接详细信息和凭据。 具体而言:

    1. 请注意“URI”** 字段。 稍后在本练习中将用到此终结点值。

    2. 请注意“主键”** 字段。 稍后在本练习中将用到此键值。

    3. 请注意“主连接字符串”** 字段。 你将在此练习的稍后部分使用此连接字符串值。

  7. 从资源菜单中选择“数据资源管理器”。

  8. 在“数据资源管理器”窗格中,选择“新建容器” 。

  9. 在“新建容器”弹出窗口中,为每个设置输入以下值,然后选择“确定” :

    设置
    数据库 ID 新建 | cosmicworks**
    容器 ID products
    分区键 /categoryId
  10. 返回到“数据资源管理器”窗格中,展开“cosmicworks”数据库节点,然后观察层次结构中的“products”容器节点。

使用示例数据为 Azure Cosmos DB for NoSQL 帐户设定种子

你将使用命令行实用工具来创建 cosmicworks 数据库和 products 容器。

  1. 在 Visual Studio Code** 中,打开“终端”** 菜单,选择“新建终端”**

  2. 在计算机上安装可全局使用的 [cosmicworks][nuget.org/packages/cosmicworks] 命令行工具。

     dotnet tool install cosmicworks --global --version 1.*
    

    💡 此命令可能需要几分钟时间才能完成。 如果你过去已经安装了此工具的最新版本,此命令将输出警告消息(*工具 “cosmicworks” 已安装)。

  3. 使用以下命令行选项运行 cosmicworks 以设置 Azure Cosmos DB 种子帐户:

    选项
    –endpoint 之前在本实验室中复制的终结点值
    –key 之前在本实验室中复制的键值
    –datasets product
     cosmicworks --endpoint <cosmos-endpoint> --key <cosmos-key> --datasets product
    

    📝 例如,如果终结点为:https­://dp420.documents.azure.com:443/,密钥为:fDR2ci9QgkdkvERTQ==,则命令为:cosmicworks --endpoint https://dp420.documents.azure.com:443/ --key fDR2ci9QgkdkvERTQ== --datasets product

  4. 等待 cosmicworks 命令完成对帐户的数据库、容器和项的填充。

  5. 关闭集成终端。

  6. 关闭 Visual Studio Code。

创建 Azure AI 搜索资源

继续完成此练习之前,需要先创建新的 Azure AI 搜索实例。

  1. 在新的 Web 浏览器窗口或选项卡中,导航到 Azure 门户 (portal.azure.com)。

  2. 使用与你的订阅关联的 Microsoft 凭据登录到门户。

  3. 选择“+ 创建资源”**,搜索“AI 搜索”,然后使用以下设置创建新的“Azure AI 搜索”** 帐户资源,并将所有其余设置保留为默认值:

    设置
    订阅 你的现有 Azure 订阅
    资源组 选择现有资源组,或创建新资源组
    名称 输入全局唯一名称
    位置 选择任何可用区域

    📝 你的实验室环境可能存在阻止你创建新资源组的限制。 如果是这种情况,请使用现有的预先创建的资源组。

  4. 等待部署任务完成,然后继续执行此任务。

  5. 转到新创建的“Azure AI 搜索”** 帐户资源。

Azure Cosmos DB for NoSQL 数据的生成索引器和索引

将创建一个索引器,该索引器按小时索引特定 Azure Cosmos DB for NoSQL 容器中数据的子集。

  1. 从“AI 搜索”资源边栏选项卡中,选择“导入数据”****。

  2. 在“导入数据”向导的“连接到数据”步骤中,选择“数据源”列表中的“Azure Cosmos DB” 。

  3. 将数据源配置为以下设置,并将所有其余设置保留为其默认值:

    设置
    数据源名称 products-cosmossql-source
    连接字符串 之前创建的 Azure Cosmos DB for NoSQL 帐户的连接字符串**
    Database cosmicworks
    集合 products
  4. 在“查询”字段中,输入以下 SQL 查询,以创建容器中数据子集的一个具体化视图:

     SELECT 
         p.id, 
         p.categoryId, 
         p.name, 
         p.price,
         p._ts
     FROM 
         products p 
     WHERE 
         p._ts > @HighWaterMark 
     ORDER BY 
         p._ts
    
  5. 选中“按 _ts 对查询结果排序”复选框。

    📝 此复选框让 Azure AI 搜索功能知道查询按 _ts 字段对结果进行排序**。 这种类型的排序启用增量进度跟踪。 如果索引器失败,可以直接从原先的 _ts 值处开始,因为结果按时间戳排序**。

  6. 选择“下一步:添加认知技能”。

  7. 选择“跳到: 自定义目标索引”。

  8. 在向导的“自定义目标索引”步骤中,使用以下设置配置索引,将所有剩余设置保留为默认值:

    设置
    索引名称 products-index
    id
  9. 在字段表中,使用下表为每个字段配置“可检索”、“可筛选”、“可排序”、“可分面”和“可搜索”选项 :

    字段 可检索 可筛选 可排序 可分面 可搜索
    id    
    categoryId  
    name   ✔(英语 - Microsoft)
    price  
  10. 选择“下一步:创建索引器”。

  11. 在向导的“创建索引器”步骤中,使用以下设置配置索引器,将所有剩余设置保留为默认值:

    设置
    Name products-cosmosdb-indexer
    计划 每小时
  12. 选择“提交”以创建数据源、索引和索引器。

    📝 创建第一个索引器后,可能需要关闭一个调查弹出窗口。

  13. 在“AI 搜索”资源边栏选项卡中,导航到“索引器”选项卡,观察第一个索引操作的结果****。

  14. 请等待 products-cosmosdb-indexer 索引器的状态为“成功”,然后再继续执行此任务 。

    📝 如果未自动更新边栏选项卡,可能需要使用“刷新”选项来更新边栏选项卡。

  15. 导航到“索引”选项卡,然后选择“products-index”索引 。

使用示例搜索查询来验证索引

现在,Azure Cosmos DB for NoSQL 数据的具体化视图已在搜索索引中,可以执行一些基本查询来利用 Azure AI 搜索中的功能。

📝 此实验的目的不是教授 Azure AI 搜索语法。 这些查询经过特别设计,专门用来展示搜索索引和引擎中提供的一些功能。

  1. 在“搜索浏览器”** 选项卡中,选择“视图”下拉菜单,然后选择**“JSON 视图”。

  2. 请注意,在**“JSON 查询编辑器”中,默认 JSON 搜索查询的语法使用 ***(通配符)运算符返回所有可能的结果。

    {
        "search": "*"
    }
    
  3. 选择“搜索”** 按钮即可执行搜索。

  4. 请注意,此搜索查询返回所有可能的结果。

  5. 在“JSON 查询”编辑器中,输入以下查询,然后选择“搜索”****:

     {
         "search": "touring 3000"
     }
    
  6. 请注意,此搜索查询返回包含词语“旅行”或“3000”的结果,并对同时包含这两个词的结果给予更高的分数****。 然后按 @search.score 字段的降序对结果进行排序。

  7. 在“JSON 查询”编辑器中,输入以下查询,然后选择“搜索”****:

     {
         "search": "red"
         , "count": true
     }
    
  8. 请注意,此搜索查询返回的结果带有词语“红色”,但现在还显示了一个元数据字段,指示结果的总数,即使这些结果未包含在同一页面中。

  9. 在“JSON 查询”编辑器中,输入以下查询,然后选择“搜索”****:

     {
         "search": "blue"
         , "count": true
         , "top": 6
     }
    
  10. 请注意,此搜索查询一次只返回六个结果,即使服务器端有更多匹配项也是如此。

  11. 在“JSON 查询”编辑器中,输入以下查询,然后选择“搜索”****:

     {
         "search": "mountain"
         , "count": true
         , "top": 25
         , "skip": 50
     }
    
  12. 请注意,此搜索查询跳过前 50 个结果,返回了 25 个结果。 如果这是客户端应用程序中的分页视图,可以推断出这是结果的第三个“页”。

  13. 在“JSON 查询”编辑器中,输入以下查询,然后选择“搜索”****:

     {
         "search": "touring"
         , "count": true
         , "filter": "price lt 500"
     }
    
  14. 请注意,此搜索查询仅返回数值价格字段的值小于 500 的结果。

  15. 在“JSON 查询”编辑器中,输入以下查询,然后选择“搜索”****:

     {
         "search": "road"
         , "count": true
         , "top": 15
         , "facets": ["price,interval:500"]
     }
    
  16. 请注意,此搜索查询返回一个分面数据集合,这些数据指示属于每个类别的项数,即使这些项并非全部位于当前结果页中。 此示例中,匹配项以 500 为划分区间分解为各数值价格类别。 这通常用于填充客户端应用程序中的筛选器和进行导航辅助。

  17. 关闭 Web 浏览器窗口或选项卡。