我正在开发一个由 OData 服务提供支持的搜索功能。它将返回一个或一组 Header Objects 作为结果。我们需要搜索的许多字段不在 Header 对象中。它们仅在子对象(导航属性)中。能够对子字段执行 OData 搜索并仍然返回父对象列表的正确方法是什么。
这类似于我期望在标准 SQL 中作为“存在”查询能够执行的操作。
我正在为我的项目使用 Java - Apache Olingo,但我相信这是一个一般性的 OData 问题。
是的,这是完全可能的,只需在 $filter 中包含子路径
例如说我们有一个标题 Aircraft 和 child Airline
/Aircraft 将列出所有 Airlines Aircraft 的所有飞机?$filter=Airline/Code eq 'BA' 将列出所有 Aircraft for BA only
对于您的第二个查询,要返回子级并过滤父级...不确定是否只返回子级-如果您通过其键解析为单个父级,则可以执行此操作,例如 Aircraft(123)/Airline - 会发现带有 123 键的飞机并仅返回航空公司子导航属性信息
过滤并包含多个标题,那么我认为您唯一的选择是使用 $expand 将子信息包含在标题信息中。例如
Aircraft?$filter=BodyType eq 'NB'&$expand=Airline - 所以这会过滤 NB 类型(窄体)上的头部飞机,并包括子航空公司信息。
希望这可以帮助。
如果它与 OData 协议本身有关,则支持如下:地址/城市 eq 'Redmond' 地址/城市 ne 'London' ( http://docs.oasis-open.org/odata/odata/v4.0/errata02/ os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398301)
当谈到 Apache Olingo 中的实现时,您可以在其邮件列表中提问:user@olingo.apache.org。您可以关注http://olingo.apache.org/support.html加入讨论列表。