如何构造FHIR查询以排除含指定标签集合的Patient资源?
FHIR查询:排除含任意指定标签的Patient资源
要检索完全不包含abcd或efgh中任何一个标签的Patient资源,正确的构造方式是使用多个_tag:not参数,通过&连接(FHIR中多个搜索参数默认是AND逻辑):
GET [base]Patient?_tag:not=abcd&_tag:not=efgh
为什么之前的方法无效?
_tag:not=abcd,efgh不生效的原因:
FHIR中_tag参数的逗号分隔多值是OR逻辑,加上:not修饰符后,这个查询会被解析为“排除同时拥有abcd和efgh两个标签的资源”,而非排除拥有其中任意一个标签的资源,完全不符合需求。_filter=meta.tag+ne+abcd无效的原因:meta.tag是数组类型,ne操作符在这里的逻辑是“存在某个标签不等于abcd”,而非“不存在任何等于abcd的标签”。只要资源有其他标签,这个条件就会成立,所以会返回包含abcd标签的资源。如果要用_filter实现,需要明确检查标签的不存在性,示例如下(需补充标签的system,若未指定system可省略):GET [base]Patient?_filter=not(meta.tag.system='http://example.org/tags' and meta.tag.code='abcd')&_filter=not(meta.tag.system='http://example.org/tags' and meta.tag.code='efgh')
推荐方案
优先使用多个_tag:not参数的方式,既符合FHIR标准搜索参数的设计,又简洁易读,兼容性更好。
内容的提问来源于stack exchange,提问作者RKodakandla
相关产品推荐
相关产品推荐

