可以将FHIR资源的任何元素用作搜索参数吗?

时间:2015-11-27 22:00:39

标签: hl7-fhir

搜索参数的使用是否仅限于公共搜索参数(即.id,_text)和每个资源定义底部定义的参数?例如,家庭,在患者资源@ https://www.hl7.org/fhir/patient.html#search上定义。

我想知道是否可以直接使用资源的任何元素作为搜索参数?例如:

  1. 使用3个以上系列搜索ImagingStudy:/ ImagingStudy?numberOfSeries> 3
  2. 使用任何具有在线可用性的系列搜索ImagingStudy: /ImagingStudy?series.availability=ONLINE。这类似于Odata的复杂类型过滤器(http://www.odata.org/getting-started/basic-tutorial/#filter),其中相同的查询可以在OData中写为/ ImagingStudy?$ filter = series / any(s:s / availability eq'ONLINE')
  3. 在2015-11-28添加以下内容:

    我们的服务器是一种只读服务,它聚合来自各种源系统的数据,并实现基于FHIR的API。以下是有关基础设施的一些有趣事实和挑战:

    • 大多数源系统只能提供原始查询功能, 例如,按日期过滤。
    • 我们无法创建索引,因为我们没有数据存储库。
    • 在典型的场景中,我们首先从客户端的请求中检索日期过滤器,并使用它来减少源系统需要返回的数据量。然后,我们的服务将处理聚合结果的剩余过滤器,排序和分页。

    例如,我们需要对ImagingStudy.procedure.code.coding []。display。

    实现字符串搜索。

    很高兴知道服务器能够在一致性声明中定义额外的搜索参数;但是,对于我们的场景,搜索参数主要由客户需求驱动。对此需求的任何更改或更新都可能触发服务器一致性的更改。这使得一致性/合同易受变化的影响。

    这是促使我提出问题的动机,因为FHIR客户端和服务器已经通过FHIR资源定义了明确定义的合同,是否可以扩展此合同用于搜索参数,客户端和服务器将能够利用FHIR资源的现有对象图作为搜索参数,而无需定义单独的列表。

1 个答案:

答案 0 :(得分:1)

搜索参数是单独定义的,并映射到资源中的实际路径,以允许服务器通过map / reduce之类的东西来维护索引,而不是长时间地对未编入索引的内容执行查询。您不能简单地查询资源中的任意路径。注意:这包括_filter搜索参数。

但是,

允许服务器定义自己的搜索参数并将这些参数映射到资源中的任意路径。如果服务器公开了一个搜索参数,它应该在一致性声明中声明它,然后你就会知道你是否可以使用它。

(顺便说一句,也允许服务器选择不使用map / reduce,并长时间执行查询,因此允许任何路径用作参数,如果这是他们的技术基础的有效策略 - 虽然我不知道有人这样做。)