Microsoft graph Mail Search 严格值
Microsoft graph Mail Search Strict value
我对搜索参数有疑问。我想在我的查询中传递一个短语。例如,我正在寻找主题为 "Test 1" 的电子邮件。
为此,我正在获取此资源。
https://graph.microsoft.com/v1.0/me/messages?$search="subject:Test 1"
但此查询的行为是:查找主题中包含 "Test" 或任何其他字段中包含 1 的邮件。
参考KQL Syntax
A phrase (includes two or more words together, separated by spaces; however, the words must be enclosed in double quotation marks)
所以,为了做我想做的事,我必须在我的短语周围加上双引号 (") 以进行严格的值搜索。如下所示
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\"\"'.",
这是预期的行为。我很确定它不会起作用。
如果有人对解决方案或解决方法有任何建议,我是买家。
到目前为止我已经尝试过的:
- 使用简单引号
- 删除 $select=
之后的引号
- 删除主题部分 $select="Test 1",与此 post 中提到的第一个请求相同的行为。它将查找包含 "test" 或“1”的电子邮件。
此致。
编辑:
在 sasfrog 的回答之后:
我使用 $filter :它适用于简单的运算符 AND,OR.I 使用 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:
我正在寻找主题为 test 1 的邮件;
让值 = "test 1"。所以你必须使用 space 分隔符来拼接它。在写了一些代码来操作这个数组之后,得到如下的东西。
$search="(subject:test AND subject:1)"
如果您使用多字段搜索,括号可能很重要。瞧。
不确定它是否足以满足您正在做的事情,但是在 filter
查询中使用 contains
函数怎么样:
https://graph.microsoft.com/v1.0/me/messages?$filter=contains(subject,'Test 1')
听起来您已经在查看 doco,但here it is 以防万一。
Update 同样,这对我有用 search
方法:
https://graph.microsoft.com/v1.0/me/messages?$search="subject:'Test 1'"
我对搜索参数有疑问。我想在我的查询中传递一个短语。例如,我正在寻找主题为 "Test 1" 的电子邮件。 为此,我正在获取此资源。
https://graph.microsoft.com/v1.0/me/messages?$search="subject:Test 1"
但此查询的行为是:查找主题中包含 "Test" 或任何其他字段中包含 1 的邮件。 参考KQL Syntax
A phrase (includes two or more words together, separated by spaces; however, the words must be enclosed in double quotation marks)
所以,为了做我想做的事,我必须在我的短语周围加上双引号 (") 以进行严格的值搜索。如下所示
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\"\"'.",
这是预期的行为。我很确定它不会起作用。
如果有人对解决方案或解决方法有任何建议,我是买家。
到目前为止我已经尝试过的:
- 使用简单引号
- 删除 $select= 之后的引号
- 删除主题部分 $select="Test 1",与此 post 中提到的第一个请求相同的行为。它将查找包含 "test" 或“1”的电子邮件。
此致。
编辑: 在 sasfrog 的回答之后: 我使用 $filter :它适用于简单的运算符 AND,OR.I 使用 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: 我正在寻找主题为 test 1 的邮件; 让值 = "test 1"。所以你必须使用 space 分隔符来拼接它。在写了一些代码来操作这个数组之后,得到如下的东西。
$search="(subject:test AND subject:1)"
如果您使用多字段搜索,括号可能很重要。瞧。
不确定它是否足以满足您正在做的事情,但是在 filter
查询中使用 contains
函数怎么样:
https://graph.microsoft.com/v1.0/me/messages?$filter=contains(subject,'Test 1')
听起来您已经在查看 doco,但here it is 以防万一。
Update 同样,这对我有用 search
方法:
https://graph.microsoft.com/v1.0/me/messages?$search="subject:'Test 1'"