深入挖掘 IBM Cloudant 仪表板
IBM® Cloudant® for IBM Cloud® 仪表板为新用户和经验丰富的 IBM Cloudant 用户提供了添加,编辑和删除文档的机会。 IBM Cloudant 用户可以优化最适合其应用程序用例的索引和查询选项。
目标
使用“仪表板”设置一些基本索引,以查看每个 IBM Cloudant的查询机制的工作方式。
准备工作
在开始本教程之前,需要在 IBM Cloudant 中创建服务实例。 您可以遵循 入门 教程中的指示信息来创建一个。
步骤 1. 数据集
-
创建名为
books
的数据库。 -
创建一些样本数据以表示库中的工作簿,如以下示例中所示:
{ "_id": "BXP9G5ZQY9Q4EA13", "author": "Dickens", "title": "David Copperfield", "year": 1840, "pages": 723, "publisher": "Penguin", "url": "https://www.somurl.com/dc" }
-
通过使用 IBM Cloudant 仪表板,继续添加与上一步中的模式匹配的一些文档。
文档存储简单的
key/value
对,其中包含有关每本书的元数据: 其作者和发布者。 在此示例中,我们将处理以下三个用例:- 一种查询工具,允许用户按已知发布者和年份查找书籍。
- 一种通用搜索引擎,允许用户通过以下一个或多个描述符的组合来查找书籍: 作者,标题,年份和发布者。
- 详细说明按年发布的书籍数量的报告。
步骤 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 中,然后单击 运行查询。
运行查询
要尝试查询,请执行以下步骤:
-
转到IBM Cloudant仪表板。
-
打开在先决条件部分中创建的服务实例。
-
打开您创建的数据库。
-
转到查询选项卡。
-
将上一部分中的查询 JSON 粘贴到“Cloudant 查询”窗口中。
-
单击运行查询。 请参阅以下截屏中的结果:
Window for running queries
IBM Cloudant 与满足条件的文档匹配,似乎 可以快速执行此操作,但存在 catch。IBM Cloudant 未使用索引来处理此查询,这意味着数据库必须扫描数据库中的每个文档以获取答案。 这种扫描方式适用于小型数据集。 但是,如果您正在运行数据集一直在扩展的生产应用程序,那么您肯定 不 希望依赖未建立索引的查询。
创建索引
要创建索引,我们可以告诉 IBM Cloudant 在查询中使用的 publisher
和 year
字段上创建索引。
-
从 IBM Cloudant 仪表板中,选择
books
数据库。 -
选择“设计文件”选项卡。
-
从“设计文档”菜单中选择“新索引”。
-
复制并粘贴以下索引定义:
{ "index": { "fields": [ "publisher", "year" ] }, "name": "publisher-year-index",indexingdashboard5 "type": "json" }
请参阅以下截屏中的示例:
Window for creating indexes
fields
数组包含我们希望 IBM Cloudant 建立索引的字段列表。
如果我们重复查询,那么即使数据库大小达到数百万个文档,它也会更快且保持快速。
建立索引指示 IBM Cloudant 创建辅助数据结构,使其能够以比依次查看每个文档更快的速度找到所需的数据片。IBM Cloudant 查询最适合基于相同顺序的相同字段的固定查询。
有关更多信息,请参阅 IBM Cloudant 文档中的以下详细信息:
此索引对于同时涉及 publisher
和 year
的查询很有用,但如果引入另一个字段或使查询更复杂 (例如,通过使用 $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
,那么会将数据添加到索引。
-
从 IBM Cloudant 仪表板中,选择
books
数据库。 -
选择“设计文件”选项卡。
-
从菜单中选择“新建搜索索引”。
-
输入设计文档名称。
-
输入索引名。
-
将以下代码粘贴到搜索索引函数中:
function (doc) { index("author", doc.author); index("publisher", doc.publisher); index("title", doc.title); index("year", doc.year); }
-
选择“标准分析器”。
New Search Index window
然后,您可以构建包含一个,部分或所有已建立索引的字段以及 AND 和 OR 运算符的复杂查询。
IBM Cloudant 如果您有许多涉及不同字段组合的搜索用例,那么最好进行搜索。
有关更多信息,请参阅以下资源:
- IBM Cloudant 搜索使用 "analyzers" 在建立索引之前预处理文本。 了解有关 搜索分析程序 的信息,以确保获取预期的结果。
- IBM Cloudant 搜索文档
步骤 4. 聚集数据- MapReduce
IBM Cloudant 查询和 IBM Cloudant 搜索无法 聚集 搜索结果。 换言之,您无法询问 1973 年出版了多少本书? IBM Cloudant的 MapReduce 功能部件允许创建可用于选择或聚集的辅助索引。 MapReduce 索引类似于 IBM Cloudant Search,它是通过提供 JavaScript 函数创建的-对 emit
函数的任何调用都会向索引添加一行。
-
从 IBM Cloudant 仪表板中,选择
books
数据库。 -
选择“设计文件”选项卡。
-
从菜单中选择“新建视图”。
-
在下拉字段中保留新文档。
-
在索引名称字段中输入名称。 此名称是新的视图名称。
-
从“减少 (可选)”下拉菜单中选择
_count
。 这样我们的结果将 计数。 -
将以下代码粘贴到“映射函数”字段中:
function (doc) { emit(doc.year, null); }
请参阅以下截屏中的窗口示例:
New View window 后续的 MapReduce 视图允许按年查找文档 (因为这是索引的键)。 但是,如果从 选项 下拉菜单中选择“减少”功能的复选框,那么索引将聚集结果,并按键 (年份) 进行分组:
Windows for running queries 请参阅在索引聚集结果后生成的示例结果。
结果集 MapReduce 视图非常适合生成数据的有序视图,其中包含您定义的
key/value
对。 它们可用于按键选择个别键,范围查询或聚集分组。
有关更多信息,请参阅 IBM Cloudant 文档中的以下资源: