【问题标题】:Can any element of a FHIR resource be used as a search parameter?FHIR 资源的任何元素都可以用作搜索参数吗?
【发布时间】:2015-11-27 22:00:38
【问题描述】:

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

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

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

以下于 2015-11-28 添加:

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

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

例如,我们需要针对 ImagingStudy.procedure.code.coding[].display 实现字符串搜索。

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

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

【问题讨论】:

  • 对于第一个例子,查询应该是 /ImagingStudy?numberOfSeries=gt3

标签: hl7-fhir


【解决方案1】:

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

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

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

【讨论】:

  • 顺便说一句,您可以在这里建议为资源添加新的标准参数:gforge.hl7.org/gf/project/fhir/tracker/…
  • 感谢您的 cmets,@Grahame。我有关于这个问题的其他信息。由于 cmets 的长度限制,我已将它们附加到上面的原始问题中。
  • 这不会改变我的答案。您可能通过某种方法或其他方法表明您确实支持通过一致性声明中的任何路径进行查询,但您实际上可能无法做到这一点 - 语义是什么?您可能只想按叶节点搜索,除非您想改变,例如令牌的工作方式。所以我认为最好还是声明你查询的内容。并且添加新的搜索 Paramus 不应该是脆弱的;它不会改变现有的功能
猜你喜欢
  • 1970-01-01
  • 2021-05-23
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
相关资源
最近更新 更多