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

时间:2018-06-20 01:46:24

标签: microsoft-graph

当我在查看查询参数here的文档时,我注意到有两个查询参数似乎完全相同:WHEREfilter

我只是想知道它们之间有什么区别,什么时候用完了。

2 个答案:

答案 0 :(得分:2)

搜索和过滤器都会减少最终获得的结果集,但是以不同的方式进行操作。

  • 搜索针对整个图形对查询进行操作,并减少了搜索查询返回的信息量。通常针对搜索能力强的查询(例如,搜索可以索引的项目。
  • 过滤器将对搜索返回的结果集进行处理,以提供更精细的过滤效果。将其分开可以进行过滤,以执行无法针对完整集合执行的任务。

这在Microsoft文档中有所说明:

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

出于性能方面的考虑,最好同时使用两者,通过搜索来缩小结果范围(例如,使用搜索索引),然后对返回的结果进行精细过滤。

答案 1 :(得分:2)

尽管它们相似,但操作却有所不同。

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

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

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

例如,/messages?$filter=subject eq 'bacon'仅返回主题 为“培根”的邮件。