搜索

搜索笔记和笔记元数据


搜索的基本概念

对用户的印象笔记账户完成一次基本的搜索需要以下三步:

  1. 一个 NoteFilter 的实例
  2. 调用 NoteStore.findNotesMetadata
  3. 接着调用 NoteStore.getNote 以获取所有匹配此搜索的笔记。

根据搜索类型的不同,NoteFilter 提供了几个可被赋值的成员变量:

  • words — 发出纯文本的搜索查询(例如,“notebook:foo tag:bar”)
  • notebooksGuid — 使用 Notebook.guid 来将搜索结果限定到特定的一个笔记本内。
  • tagGuids — 将搜索结果限定在具有这些标签的笔记中 (用 Tag.guid 字符串来表示)。
  • inactive — 将此变量设为 true 将只返回未在使用中的笔记(也就是在废纸篓中的笔记)。如果设置为 false——也是默认值——那么只会返回正在使用中的笔记。

NoteStore.findNotesMetadata 接受五个参数,依次说明如下:

  1. 有效的认证 token(开发者 token 也可以)
  2. 一个 NoteFilter 实例
  3. 偏移量,即所有可能结果中第一个结果的下标。后续通过调用 findNotes 来获取大量结果时会用到它。
  4. 本次请求要获取的笔记条数。如果匹配结果的笔记数量少于此值,那么会返回所有匹配的笔记。
  5. 一个 NotesMetadataResultSpec 的实例, 它可以让用户设置要返回哪些匹配的笔记的信息。

如果我们想要获取用户账户内最新的100条笔记的标题,那代码会看起来像这样:

正如你看到的,我们创建了一个 NoteFilter 实例并将变量 ascending 设成 False (这样所有的结果都是以降序返回的),将偏移量设为 0, 笔记上限数设为 100。如果查询结果少于 100 条笔记,那么将返回全部匹配的笔记。将 NotesMetadataResultSpec 实例的 includeTitle 设为 True (其他的值仍然是默认值 False),这样我们就能保证不会返回不必要的数据了。

findNotesMetadata 会返回一个我们还未接触过的类型: NotesMetadataList。如果你想了解该类型的全部内容,你可以仔细阅读一下对应的文档。本例中,我们想要看一下会返回哪些笔记——可以通过 NotesMetadataList.notes 来进行查询:

本例运行时,程序会输出每条匹配笔记的 GUID 和标题。

下载完整笔记

当通过 NoteStore.findNotesMetadata 确定好你想要下载下来的笔记之后, 你可以调用NoteStore.getNote,它会为匹配的笔记返回一个 Types.Note 的实例,用于下载笔记正文、附加文件(资源)和图像识别信息。