Microsoft Graph Mail API 中的筛选器和搜索查询参数有什么区别?

Ste*_*sić 6 microsoft-graph-api

当我在这里查看查询参数的文档时,我注意到有两个查询参数似乎做了完全相同的事情:filtersearch

我只是想知道它们之间有什么区别,什么时候使用一个而不是另一个。

Mar*_*eur 12

虽然它们很相似,但操作方式略有不同。

$search使用关键字查询语言 (KQL),并且仅受messageperson集合支持(即您不能$search在大多数端点上使用)。默认情况下,它会搜索多个属性。最重要的$search是“包含”搜索,这意味着它将在字符串中的任何位置查找您的搜索词/短语。

例如,将在、、 或属性/messages?$search="bacon"中的任意位置搜索单词“bacon” 。fromsubjectbody

与 不同的是$search,该$filter参数只搜索指定的属性,不支持“包含”搜索。它还适用于几乎每个端点。在大多数地方,它支持以下运算符:等于 ( eq)、不等于 ( ne)、大于 ( gt)、大于或等于 ( ge)、小于 ( lt)、小于或等于 ( le)、和 ( and) 或 ( or) ,而不是 ( not),并且(在某些端点上)以 ( ) 开头startsWith

例如,/messages?$filter=subject eq 'bacon'将仅返回主题“bacon”的消息。


Gro*_*ify 6

搜索和过滤都会减少您最终收到的结果集,但它们的操作方式不同。

  • 搜索对整个图的查询进行操作,并减少搜索查询返回的信息量。这通常针对搜索擅长的查询进行优化,例如执行可索引项目的搜索。
  • 过滤器对搜索返回的小得多的结果集进行操作,以提供更细粒度的过滤。将其分离出来允许过滤执行无法针对完整集合执行的任务。

微软的文档中指出了这一点:

  • 搜索:Returns results based on search criteria.
  • 过滤器:(Filters results (rows).搜索可以返回的结果)

出于性能目的,如果可以的话,最好同时使用两者,搜索以缩小结果范围(例如使用搜索索引),然后对返回的结果进行细粒度过滤。