【发布时间】:2019-02-18 16:09:14
【问题描述】:
我需要为 Microsoft Graph API 创建一个 $filter 查询,用于搜索字符串中的特定单词(用户的显示名称)。
例如,我希望能够找到所有名称中包含 "Esteban" 的用户:
路易斯·埃斯特班
阿尔方斯·埃斯特班
埃斯特班·路易斯
阿尔方斯·埃斯特班·路易斯
以下查询有效,但仅返回名称中以 "Esteban" 开头的用户,而不返回包含 "Esteban" 的用户:
https://graph.microsoft.com/v1.0/users?$filter=startswith(displayName,'Esteban')
我也尝试使用contains 而不是startswith,但它给出了错误响应:
{ "error": { "code": "Request_BadRequest", "message": "一个名为 'contains' 的未知函数被发现。这也可能是对导航属性的键查找,这是不允许的。 ", "innerError": { "request-id": "e5ed5c30-4e62-4497-8976-1d38167e759d", "date": "2018-09-13T23:17:17" } } }
即使Microsoft Graph docs 说他们支持OData 4.0,他们也这么说:
“目前任何 Microsoft Graph 资源都不支持包含字符串运算符。”
我还尝试了OData documentation 和construction rules 给出的其他命令,这些命令应该由filter 和其他查询参数支持。
我特别尝试了这些命令的组合:
开始于
结束于
索引
子串
但没有成功。似乎 MS Graph API 不支持除 startswith 之外的任何东西。
我尝试了 API 的 v1.0 和 beta 端点。
有没有其他方法,OData 4.0 命令和/或 MS Graph API 支持的查询参数的智能组合,允许搜索等效到contains?
PS:您可以使用 Graph Explorer here 尝试查询。
【问题讨论】:
-
我担心这是不可能的,但我也觉得应该有办法。 MS 文档说:“目前任何 Microsoft Graph 资源都不支持包含字符串运算符。” 在线搜索,似乎人们至少从 2014 年就开始请求此功能。
-
谢谢你,我会尝试研究,看看我是否找到了一些东西并更新帖子。
-
好像还是不支持,但是能不能不把所有用户都拿到,然后自己过滤呢?从以前的帖子中我可以看到的唯一替代方法是使用支持 $search 查询的 People API
标签: search filter odata microsoft-graph-api