我的搜索参数有问题。我想在查询中传递一个短语。例如,我正在寻找主题为“测试1”的电子邮件。 为此,我正在尝试使用此资源。
https://graph.microsoft.com/v1.0/me/messages?$search="subject:Test 1"
但是此查询的行为是:寻找主题中包含“测试”或其他任何字段中包含1的邮件。 引用KQL Syntax
一个短语(包括两个或多个单词,并用空格隔开;但是,单词必须用双引号引起来)
所以,要想做我想做的事,我必须在我的短语周围加上双引号(“)来进行严格的值搜索。如下所示
subject:"Test 1"
问题就在这里。 Microsoft graph api已经在参数$ search之后使用双引号(“)。
?$search="Key words"
所以我不能做KQL文档中提到的事情。
https://graph.microsoft.com/v1.0/me/messages?$search="subject:"Test 1""
抛出错误:
"Syntax error: character '1' is not valid at position 15 in '\"subject:\"test 1\"\"'.",
这是预期的行为。我很确定它不会起作用。
如果有人对解决方案或解决方法有任何建议,则说明我是买家。
到目前为止,我已经尝试过:
最诚挚的问候。
编辑: 在sasfrog的治疗之后: 我使用$ filter:它与简单的运算符AND或OR配合良好。使用Not运算符会出现一些错误。顺便说一句,您必须使用orderby参数按日期显示结果并将字段添加到过滤器参数中。
示例1(正常工作,我首先要提出的要求):
https://graph.microsoft.com/v1.0/me/messages/?$orderby=receivedDateTime desc &$filter=receivedDateTime ge 1900-01-01T00:00:00Z AND contains(subject,'test 1')
示例2(无效)
https://graph.microsoft.com/v1.0/me/messages/?$orderby=receivedDateTime desc &$filter=(receivedDateTime ge 1900-01-01T00:00:00Z AND contains(subject,'test 1')) NOT(contains(from/EmailAddress/address,[specific address]))
编辑2 经过一些过滤参数测试。 NOT运算符仍无法正常工作,因此要解决此问题,请使用“ ne”(非等于) 示例2变为:
https://graph.microsoft.com/v1.0/me/messages/?$orderby=receivedDateTime desc&$filter=(receivedDateTime ge 1900-01-01T00:00:00Z AND contains(subject,'test 1')) AND (from/EmailAddress/address ne [specific address])
更新:$ search的其他解决方案
使用$ filter很棒,但是有时候看起来很慢。所以我找到了解决我的问题的方法。 在所有术语之间使用AND运算符。
示例4: 我正在寻找主题为测试1的邮件; 令值=“测试1”。因此,您必须使用空格分隔符对其进行拼接。然后编写一些代码来操纵该数组,以获得类似下面的内容。
$search="(subject:test AND subject:1)"
如果使用多字段搜索,括号可能很重要。还有Voilà。
答案 0 :(得分:1)
不确定是否足以满足您的需求,但是如何在contains
查询中使用filter
函数呢?
https://graph.microsoft.com/v1.0/me/messages?$filter=contains(subject,'Test 1')
听起来像您已经在看doco了,但是here it is只是为了以防万一。
更新,这对我来说也可以使用search
方法:
https://graph.microsoft.com/v1.0/me/messages?$search="subject:'Test 1'"