IBM Cloud Docs
深入挖掘 IBM Cloudant 仪表板

深入挖掘 IBM Cloudant 仪表板

IBM® Cloudant® for IBM Cloud® 仪表板为新用户和经验丰富的 IBM Cloudant 用户提供了添加,编辑和删除文档的机会。 IBM Cloudant 用户可以优化最适合其应用程序用例的索引和查询选项。

目标

使用“仪表板”设置一些基本索引,以查看每个 IBM Cloudant的查询机制的工作方式。

准备工作

在开始本教程之前,需要在 IBM Cloudant 中创建服务实例。 您可以遵循 入门 教程中的指示信息来创建一个。

步骤 1. 数据集

  1. 创建名为 books 的数据库。

  2. 创建一些样本数据以表示库中的工作簿,如以下示例中所示:

    {
      "_id": "BXP9G5ZQY9Q4EA13",
      "author": "Dickens",
      "title": "David Copperfield",
      "year": 1840,
      "pages": 723,
      "publisher": "Penguin",
      "url": "https://www.somurl.com/dc"
    }
    
  3. 通过使用 IBM Cloudant 仪表板,继续添加与上一步中的模式匹配的一些文档。

    文档存储简单的 key/value 对,其中包含有关每本书的元数据: 其作者和发布者。 在此示例中,我们将处理以下三个用例:

    1. 一种查询工具,允许用户按已知发布者和年份查找书籍。
    2. 一种通用搜索引擎,允许用户通过以下一个或多个描述符的组合来查找书籍: 作者,标题,年份和发布者。
    3. 详细说明按年发布的书籍数量的报告。

步骤 2. 按发布程序和年份查询书籍- IBM Cloudant 查询

IBM Cloudant Query 是一种查询语言,允许查找总数据库的小片。 以下查询可找到 Penguin 在 2000 年发布的 10 本书:

{
  "selector": {
    "$and": [
      { "publisher": "Penguin" },
      { "year": { "$gt": 2000 } }
    ]
  },
  "limit": 10
}

该查询包含 selector 对象,该对象使用运算符和文本字段来定义所需的数据片:

  • $and 表示必须满足文档的 两个 查询子句才能使其成为结果集。
  • { "publisher": "Penguin" }-发布者必须是 "Penguin"。
  • { "year": { "$gt": 2000 } }-年份必须大于 2000。$gt 表示“大于”。

当您在 IBM Cloudant 仪表板中查看 books 数据库时,可以通过选择“查询”来尝试查询。 您可以粘贴到查询 JSON 中,然后单击 运行查询

运行查询

要尝试查询,请执行以下步骤:

  1. 转到IBM Cloudant仪表板。

  2. 打开在先决条件部分中创建的服务实例。

  3. 打开您创建的数据库。

  4. 转到查询选项卡。

  5. 将上一部分中的查询 JSON 粘贴到“Cloudant 查询”窗口中。

  6. 单击运行查询。 请参阅以下截屏中的结果:

    运行查询,结果将显示 _id,author,pages,publisher 和 year。
    Window for running queries

IBM Cloudant 与满足条件的文档匹配,似乎 可以快速执行此操作,但存在 catch。IBM Cloudant 未使用索引来处理此查询,这意味着数据库必须扫描数据库中的每个文档以获取答案。 这种扫描方式适用于小型数据集。 但是,如果您正在运行数据集一直在扩展的生产应用程序,那么您肯定 希望依赖未建立索引的查询。

创建索引

要创建索引,我们可以告诉 IBM Cloudant 在查询中使用的 publisheryear 字段上创建索引。

  1. 从 IBM Cloudant 仪表板中,选择 books 数据库。

  2. 选择“设计文件”选项卡。

  3. 从“设计文档”菜单中选择“新索引”。

  4. 复制并粘贴以下索引定义:

    {
       "index": {
          "fields": [
             "publisher", "year"
          ]
       },
       "name": "publisher-year-index",indexingdashboard5
       "type": "json"
    }
    

    请参阅以下截屏中的示例:

    单击“创建索引”以创建索引。
    Window for creating indexes

fields 数组包含我们希望 IBM Cloudant 建立索引的字段列表。

如果我们重复查询,那么即使数据库大小达到数百万个文档,它也会更快且保持快速。

建立索引指示 IBM Cloudant 创建辅助数据结构,使其能够以比依次查看每个文档更快的速度找到所需的数据片。IBM Cloudant 查询最适合基于相同顺序的相同字段的固定查询。

有关更多信息,请参阅 IBM Cloudant 文档中的以下详细信息:

此索引对于同时涉及 publisheryear 的查询很有用,但如果引入另一个字段或使查询更复杂 (例如,通过使用 $or 运算符),那么不会使用该索引。 我们将返回到完整的数据库扫描。

对于通用搜索工具,我们需要 IBM Cloudant Search,如下一节所述。

步骤 3. 创建搜索引擎- IBM Cloudant 搜索

IBM Cloudant 搜索基于 Apache Lucene,并且具有自己的允许构造富查询的查询语言。 请看下面的搜索示例:

publisher:Penguin AND (year:1972 OR year:1973) AND title:Crash

与 IBM Cloudant 查询不同,在执行查询之前,必须 指定要建立索引的字段 IBM Cloudant 通过向 IBM Cloudant 提供针对数据库中每个文档调用一次的 JavaScript 函数来定义搜索索引-如果该函数调用 index,那么会将数据添加到索引。

  1. 从 IBM Cloudant 仪表板中,选择 books 数据库。

  2. 选择“设计文件”选项卡。

  3. 从菜单中选择“新建搜索索引”。

  4. 输入设计文档名称。

  5. 输入索引名。

  6. 将以下代码粘贴到搜索索引函数中:

    function (doc) {
      index("author", doc.author);
      index("publisher", doc.publisher);
      index("title", doc.title);
      index("year", doc.year);
    }
    
  7. 选择“标准分析器”。

    选择 Standard Analyzer,然后单击 创建文档和构建索引 以创建搜索索引。
    New Search Index window

然后,您可以构建包含一个,部分或所有已建立索引的字段以及 AND 和 OR 运算符的复杂查询。

IBM Cloudant 如果您有许多涉及不同字段组合的搜索用例,那么最好进行搜索。

有关更多信息,请参阅以下资源:

步骤 4. 聚集数据- MapReduce

IBM Cloudant 查询和 IBM Cloudant 搜索无法 聚集 搜索结果。 换言之,您无法询问 1973 年出版了多少本书? IBM Cloudant的 MapReduce 功能部件允许创建可用于选择或聚集的辅助索引。 MapReduce 索引类似于 IBM Cloudant Search,它是通过提供 JavaScript 函数创建的-对 emit 函数的任何调用都会向索引添加一行。

  1. 从 IBM Cloudant 仪表板中,选择 books 数据库。

  2. 选择“设计文件”选项卡。

  3. 从菜单中选择“新建视图”。

  4. 在下拉字段中保留新文档。

  5. 在索引名称字段中输入名称。 此名称是新的视图名称。

  6. 从“减少 (可选)”下拉菜单中选择 _count。 这样我们的结果将 计数

  7. 将以下代码粘贴到“映射函数”字段中:

    function (doc) {
      emit(doc.year, null);
    }
    

    请参阅以下截屏中的窗口示例:

    要创建新的 MapReduce 视图,请添加设计文档名称; 添加 _design 文档; 添加索引名称,然后添加 Map 函数。
    New View window

    后续的 MapReduce 视图允许按年查找文档 (因为这是索引的键)。 但是,如果从 选项 下拉菜单中选择“减少”功能的复选框,那么索引将聚集结果,并按键 (年份) 进行分组:

    后续的 MapReduce 视图允许按年查找文档 (因为这是索引的键)。 但是,如果从 选项 下拉菜单中选择“减少”功能的复选框,那么索引将按键 (年份) 进行分组以汇总结果。
    Windows for running queries

    请参阅在索引聚集结果后生成的示例结果。

    请参阅索引聚集结果。
    结果集

    MapReduce 视图非常适合生成数据的有序视图,其中包含您定义的 key/value 对。 它们可用于按键选择个别键,范围查询或聚集分组。

有关更多信息,请参阅 IBM Cloudant 文档中的以下资源: