在DeviceObservationReport上使用sort搜索参数

时间:2014-10-20 18:53:43

标签: sorting search hl7-fhir

给定DeviceObservationReport之类的资源,许多字段的基数为0..many。在某些情况下,这些包含对其他资源的引用,这些资源也可能具有基数0..many。我在决定如何通过引用的资源支持“链式”查询时遇到了相当大的困难,这些查询可能是“深度”两步或三步(因为缺少更好的术语)。

例如,在单个DeviceObservationReport中可能有多个观察资源引用。完全可能的是,客户端可能希望执行查询,该查询使用特定代码请求观察的所有实例,该特定代码具有比特定时刻晚的时间戳(applyDate)。命名的搜索参数观察似乎是明显的起点,观察的路径被指定为virtualDevice.channel.metric.observation。假设virtualDevice,channel和metric字段的基数为0 .. *,那么检索所有包含代码TESTCODE并且在2014年10月10日14:00之后观察到的所有DeviceObservationReport实例的“简单”查询将类似于:< / p>

../数据/ DeviceObservationReport virtualDevice [0] .channel [0] .metric [0] = .observation.name&TESTCODE放大器; virtualDevice [0] .channel [0] .metric [0] .observation.date&GT; 2014年10%2014:00

其次,如果客户端请求在日期对结果集进行排序,那么将如何在查询中表达,因为,从我为实现此目的而进行的各种尝试,此时对查询的支持变得更加复杂,到目前为止,我还没有找到一个令人满意的解决方案。

1 个答案:

答案 0 :(得分:0)

首先,参数的路径是资源中的路径,并链接定义的名称之间的链接。所以你的查询看起来像这样:

../数据/ DeviceObservationReport observation.name = TESTCODE&安培; observation.date =&GT; 2014年10%2014:00

e.g。搜索参数是资源中的别名。然而,这个搜索的问题是参数是在根,而不是叶子 - 这意味着这找到所有设备观察报告,其中有一个观察与TESTCODE,并有一个观察日期&gt; DATE,这是微妙的与您可能想要的不同:所有设备观察报告都有一个TESTCODE观察,日期&gt; DATE。这将在FHIR的下一个主要版本中得到解决。

使用链式查询进行排序很困难。我最终提取了我排序的字段,但实际上并没有按它排序 - 我将原始匹配插入到保留表中,然后在访问辅助表时按排序字段排序。这样做的主要原因是使分页能够抵抗资源的持续变化。