我的搜索参数有问题。我想在我的查询中传递一个短语。例如,我正在寻找主题为“测试1”的电子邮件。为此,我正在做这个资源。
https://graph.microsoft.com/v1.0/me/messages?$search="subject:Test 1"
但此查询的行为是:在主题中查找包含“Test”的邮件或在任何其他字段中查找包含“Test”的邮件。参考KQL Syntax
短语(包括两个或多个单词,用空格分隔;但是,单词必须用双引号括起来)
所以,为了做我想要的,我必须在我的短语周围加上双引号(“)来进行严格的值搜索。如下所示
subject:"Test 1"
这个问题就在于此。 Microsoft图形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的anwser之后:我使用了$ 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的邮件;设value =“test 1”。所以你必须使用空间分隔符来拼接它。并且在编写了一些代码来操作这个数组之后,获得类似下面的内容。
$search="(subject:test AND subject:1)"
如果您使用多字段搜索,括号可能很重要。和Voilà。
不确定它是否足以满足您的需求,但如何在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'"