首页 论坛 FHIR专题 FHIR资料翻译 HL7 Fhir Search(fhir 搜索)

标签: 

该话题包含 0 个回复,有 1 个参与人,并且由  wyp1 年, 5 月 前 最后一次更新。

正在查看 1 帖子:1-1 (共 1 个帖子)
  • 作者
    帖子
  • #195

    wyp
    版主

    搜索

    翻译来源:http://hl7.org/fhir/http.html

    由于大部分采用直译,不妥之处希望大家提出异议共同完善

    2.21.1 搜索

    FHIR基础架构工作组

    成熟度5

    状态试用

    资源搜索是FHIR机制的基础。搜索操作通过遍历一些有参数的资源筛选设置来实现。下文描述了FHIR搜索框架,从简单的案例开始,由浅入深。实施者需要了解需求的复杂程度。

    2.21.1.1 一览表

    搜索参数类型

    所有资源的参数

    搜索结果参数

    Number Date/DateTime String Token Reference Composite Quantity URI

    _id _lastUpdated _tag _profile _security _text _content _list _has _type _query

    _sort _count _include _revinclude _summary _elements _contained _containedType

    另外,有一个特殊的搜索参数叫做_filter,它是一种变化的、可替代的搜索方法。

    此外,有一个页面列出了所有的搜索参数

    2.21.1.2 介绍

    这是个简单的案例,通过执行 RESTful 框架中的 GET 操作执行搜索:

     GET
    [base]/[type]?name=value&…{&_format=[mime-type]}}

    对于这种 RESTful 搜索(参见http://www.hl7.org/fhir/http.html#search  definition in RESTful API中的定义),参数是在URL中编码的一系列 name = [value] 对,或者作为POST的应用程序/
    x-www-form-urlencoded
    提交:

     POST
    [base]/[type]/_search{?[parameters]{&_format=[mime-type]}}

    服务器确定其服务的资源集合满足特定条件,并将HTTP响应中的结果作为包含搜索结果的资源捆绑包返回。请注意,该_format 参数适用于搜索,可有其他交互。

    搜索操作在三个定义的上下文之一中执行,控制哪些资源可被搜索:

    · 特定资源类型:GET
    [base]/[type]?parameter(s)

    · 特定的隔间( compartment)区块,可能是隔间区块的特定资源类型。: GET
    [base]/Patient/[id]/[type]?parameter(s)

    · 所有资源类型: GET
    [base]?parameter(s)
    (仅限所有类型的参数)

    搜索操作也可以在消息框架中实现(the
    messaging framework
    .)

    服务器确定其资源中哪些符合搜索参数中包含的标准,如下所述。然而,如果服务器认为它们是相关的,则具有返回附加搜索结果的特权。

    注意:搜索集是不确定的最相关的上下文的特殊搜索:患者MPI搜索。

    搜索使用 GET ET可能包括搜索参数中的敏感信息。因此,建议安全通信和端点管理,请参阅 Security
    Communications

    2.21.1.3 错误处理

    如果服务器无法执行搜索请求,则可能会返回错误。 HTTP状态代码 403 表示服务器拒绝执行搜索, 而其他 4xx 5xx 代码表示已发生某种错误。. 当搜索失败时,服务器应该返回一个 OperationOutcome 详细说明失败原因的

    注意:搜索结果为空不是失败。

    下面的例子中, 参数可能会导致错误。例如:

    · 参数可能指定了不存在的资源,例如. GET
    [base]/Observation?subject=101
    , 其中“101”不存在

    · 参数可能指定了未知代码,例如. GET
    [base]/Observation?code=loinc|1234-1
    , 服务器不知道LOINC代码“1234-1”

    · 参数可能指定超出范围的时间,例如. GET
    [base]/Condition?onset=le1995
    , 系统数据只能追溯到2001

    · 参数可能使用非法或不可接受的修饰符,例如 GET
    [base]/Condition?onset:text=1995
    , 服务器无法处理该修饰符

    · 数据时间参数可能有不正确的格式,例如 GET
    [base]/Condition?onset=23%20May%202009

    · 参数可能未知或不受支持(见下文)

    参数的内容在语法上有不正确的地方,服务器应返回一个错误。然而,如果问题是逻辑条件(例如未知的主题或代码),则服务器应该处理搜索,包括处理参数,结果返回一个空的搜索集,因为该参数不能被满足。

    在这种情况下,搜索过程可能包括 搜索集中的 OperationOutcome,其中包含关于搜索过程的附加提示和警告。搜索结果中包含搜索模式 = 的条目outcome。客户可以使用这些信息来改进未来的搜索。

    未知且不受支持的参数

    服务器可以从客户端接收到他们不能识别的参数,或者可能接收到他们认可但不支持(通常或特定搜索)的参数。通常,服务器应忽略未知或不受支持的参数,原因如下:

    · 各种HTTP堆栈和代理可能会添加不受客户端控制的参数

    · 客户端可以通过检查返回中的自我链接来确定服务器使用哪些参数(见下文) 客户端可以通过使用prefer头来指定服务器的行为方式

    · preferredhandling
    = strict
    :客户端请求服务器返回任何未知或不受支持的参数的错误

    · preferredhandling
    = lenient
    :客户端请求服务器忽略任何未知或不受支持的参数

    服务器应该尊重客户的要求,但不要求这样做。

    2.21.1.4 标准参数

    2.21.1.4.1 所有资源的参数

    以下参数适用于所有资源:: _content, _id, _lastUpdated, _profile, _query, _security, _tag. 此外,搜索参数_text and _filter, (以下记录) 也适用于所有资源(如搜索结果参数一样)。

    参数 _id 是指资源的逻辑ID,可以在搜索上下文指定资源类型时使用:

     GET
    [base]/Patient?_id=23

    此搜索将找到具有给定ID的患者资源(给定ID只能有一个资源)。在功能上,这相当于一个简单的读取操作:

     GET
    [base]/Patient/23

    但是,使用参数搜索 _id会返回一个包含请求资源的包(就是返回的是bundle
    ,
    资源包含在bundle),而不是仅仅是资源本身。

    可以在此基础上添加额外的参数(如读_include)。值得注意的是,尽管_id是一个 token类型的参数,但由于服务器应使用精确匹配,可以没有_id这个参数。

    搜索参数_lastUpdated可以用于根据上次更改时间来选择资源:

     GET
    [base]/Observation?_lastUpdated=gt2010-10-01

    2010101日起,当使用此搜索参数时,应用程序应考虑同步方法(RESTful
    history
    Subscription
    resource
    ).

    搜索参数 _tag, _profile _security参数的搜索等价于对具有 meta element的搜索,例如,

    搜索参数_tag_profile_security参数上搜索在等效于对meta(每个资源都含有meta,
    _tag
    _profile_security都是 meta 的子元素)元素的搜索。例如,

     GET
    [base]/Condition?_tag=http://acme.org/codes|needs-review

    使用以下标签搜索所有符合条件资源:

    {

    “system” : “http://acme.org/codes”,

    “code” : “needs-review”

    }

    以相同的方式:

     GET
    [base]/DiagnosticReport?_profile=http://hl7.org/fhir/StructureDefinition/lipid

     GET
    [base]/DiagnosticReport?_profile=Profile/lipid

    第一句:将搜索限制为标记成符合特定配置文件(profilie元素)的诊断报告资源

    第二句:表达引用的检索,引用的资源位于同台服务器上。

    _tag, _profile _security 参数都是token类型(见下文)。

    2.21.1.4.2 每个资源的参数

    除了 _id 存在于所有资源的参数外,每个FHIR资源类型都定义了自己的一组命名的搜索参数,其名称,类型和含义。这些搜索参数与资源定义在同一页面上,并且也作为标准Capability语句((XML or JSON)的一部分发布。

    通常,定义的搜索参数对应于资源中的单个元素,但这不是必需的,并且一些搜索参数是指多个位置中相同类型的元素,或是派生值。

    一些搜索参数是由资源定义的多个路径相关联。这意味着如果任何路径包含匹配的内容,则搜索参数匹配。如果路径匹配,则搜索结果中返回整个资源。客户端可能必须检查资源以确定哪个路径包含匹配。

    服务器不一定需要实现所以标准的搜索参数 ( _id参数除外),并且可以定义自己的参数。

    2.21.1.4.3 搜索参数类型

    每个搜索参数都由一个指定搜索参数行为方式的类型来定义。以下是定义的参数类型:

    number

    搜索参数应为数字(整数或小数)。

    date

    搜索参数是日期/时间。日期格式是标准的XML格式,尽管可以支持其他格式。

    string

    搜索参数是一个简单的字符串,如名称部分。搜索不区分大小写,不区分大小写。可能只匹配字符串的开头。字符串参数可能包含空格。

    token

    在编码元素或标识符上搜索参数。可用于搜索文本,显示名称,代码和代码/代码系统(代码)和标签,系统和密钥(用于标识符)。它的值是一个字符串或一对命名空间和值,由“|”分隔,具体取决于所使用的修饰符。

    reference

    引用另一个资源。

    composite

    组合搜索参数,将搜索两个值组合在一起。

    quantity

    搜索数量的搜索参数。

    uri

    搜索URIRFC 3986)的搜索参数。

    搜索参数也可以附加控制其行为的修饰符。可用的修饰符的种类取决于要修改的参数的类型。

    2.21.1.4.4 修饰符

    每个资源定义参数。参数名称可以将修饰符指定为后缀。修饰符通过冒号(:)与参数名称分隔开。修饰符是:

    · 对于所有参数(除了组合): :missing; 例如 gender:missing=true (或false. 搜索 gender:missing=true 将返回没有gender参数值的所有资源(通常相当于资源中没有相关元素)。搜索 gender:missing=false 将返回具有 gender 参数值的所有资源。

    · 对于字符串: :exact (匹配需要准确,没有部分匹配,区分大小写和重音), :contains(不区分大小写,不区分大小写,开始或结尾部分匹配),而不是默认的动作 (不区分大小写和重音在字符串的末尾不敏感,部分匹配).

    · 对于令牌: :text (匹配对CodeableConcept的文本部分进行部分搜索或Coding的显示部分), 而不是使用代码的默认搜索。其他定义修饰符 :in, :below, :above :not-in 在下面描述。

    · 引用: :[type] 其中[type]是资源类型的名称

    · 对于URI: :below, :above 表明,不是精确匹配,搜索项向左匹配值,反之亦然。。

    服务器将拒绝服务器不可识别的后缀的任何搜索请求。例如,如果服务器支持的name 搜索参数,但不支持name :exact修饰符, 服务器将拒绝这样的格式”name:exact=Bill, 将返回 带有  OperationOutcome clear
    error message
    HTTP 400 错误.

    2.21.1.4.5 前缀

    对于 number, date, quantity的有序参数类型,可以使用参数值的前缀来控制匹配的性质。为避免URL转义和视觉混乱,使用以下前缀:

    eq

    资源中对应参数的值等于提供的值

    搜索值的范围完全包含目标值的范围

    the range of the search value fully contains
    the range of the target value

    ne

    资源中对应参数的值不等于提供的值

    搜索值的范围不完全包含目标值的范围

    the range of the search value does not fully contain the range
    of the target value

    gt

    资源中对应参数的值大于提供的值

    搜索值上方的范围与目标值的范围相交(即重叠)

    the range above the search value intersects
    (i.e. overlaps) with the range of the target value

    lt

    资源中对应参数的值小于提供的值

    搜索值下方的范围与目标值的范围相交(即重叠)

    the range below the search value intersects
    (i.e. overlaps) with the range of the target value

    ge

    资源中对应参数的值大于或等于提供的值

    搜索值上方的范围与目标值的范围相交(即重叠),或者搜索值的范围完全包含目标值的范围

    the range above the search value intersects
    (i.e. overlaps) with the range of the target value, or the range of the
    search value fully contains the range of the target value

    le

    资源中对应参数的值小于或等于提供的值

    搜索值下方的范围与目标值的范围相交(即重叠)或搜索值的范围完全包含目标值的范围

    the range below the search value intersects (i.e. overlaps) with the range of
    the target value or the range of the search value fully contains the range of
    the target value

    sa

    资源中对应参数的值将在提供的值之后开始(不与整数值一起使用

    the value for the parameter in the resource
    starts after the provided value

    搜索值的范围与目标值的范围不重叠,搜索值上方的范围包含目标值的范围

    the range of the search value does not overlap
    with the range of the target value, and the range above the search value
    contains the range of the target value

    eb

    资源中对应参数的值在提供的值之前结束(不与整数值一起使用

    the value for the parameter in the resource
    ends before the provided value

    搜索值的范围与目标值的范围不重叠,搜索值以下的范围包含目标值的范围

    the range of the search value does overlap not with the range of the target
    value, and the range below the search value contains the range of the target
    value

    ap

    资源中对应参数的值与提供的值大致相同。 ,近似值的推荐值为指定值的10%(或日期为现在至日期之间的差距的10%),但系统可能会酌情选择其他值

    搜索值的范围与目标值的范围重叠

    the range of the search value overlaps with
    the range of the target value

    如果没有前缀, eq 则假定前缀. 请注意,搜索参数操作的方式与两个数字的操作在数学意义上的操作方式不同。sa (starts-after) eb (ends-before) 不与整数值一起使用。

    对于上述每个前缀,提供了两种解释应用于范围时,前缀的简单意图和参数的解释。范围解释为小数和日期。搜索总是对隐性的或明确的范围的值执行。例如,数字2.0的隐性范围为1.952.05,而2015-08-12的日期隐性标识当天的所有时间范围。如果目标值是RangePeriodTiming那么目标是明确的一个范围。可以确定三个范围:

    For each prefix above, two interpretations are
    provided – the simple intent of the prefix and the interpretation of the
    parameter when applied to ranges. The range interpretation is provided for
    decimals and dates. Searches are always performed on values that are implicitly
    or explicitly a range. For instance, the number 2.0 has an implicit range of
    1.95 to 2.05, and the date 2015-08-12
    has an implicit range of the all the time during that day. If the target value
    is a 
    Range, a Period, or a Timing, then the target is explicitly a range. Three
    ranges are identified:

    值域range of the value

    值的精度所暗示的极限

    数字2.0的范围是1.952.05 日期 2015-08-12 范围 00:0000:00

    低于值域range below the value

    达到指定值

    低于2.0的范围包括小于或等于<2.000000000000000000000000 的任何值。 2015-08-12T05 2345之前的范围包括直到2015-08-12T052345.000000000000000的任何时间

    高于值域range above the value

    指定或高于的值

    The range above 2.0 includes any value
    greater or equal to <2.00000000000000000000
    The range after 2015-08-12T05:23:45 includes any time after 2015-08-12T05:23:45.000000000000000

    2.0以上的范围包括大于等于<2.000000000000000000000000 的任何值。 2015-08-12T05 2345之后的范围包括2015-08-12T052345.000000000000000之后的任何时间

    正确使用这些范围将在下面进一步讨论。

    2.21.1.4.6 数值

    在资源中搜索一个简单的数值。例子:

    [parameter]=100

    值等于100,至3个有效数字精度,范围[99.5
    … 100.5]

    [parameter]=100.00

    值等于100,至5个有效数字精度,范围[99.995
    … 100.005]
    。整数也等于100.00,但不等于100.01

    [parameter]=lt100

    小于100的值

    [parameter]=le100

    小于或等于100的值

    [parameter]=gt100

    大于100的值

    [parameter]=ge100

    大于或等于100的值

    [parameter]=ne100

    不等于100的值

    注意:不确定性不考虑评估。数字的精度被认为是任意高的。(搜索参数在资源中操作的方式与数学意义上的两个数字是否彼此相等是不同的)。

    以下是一些示例搜索:

    搜索

    描述

     GET
    [base]/Encounter?length=gt20

    搜索超过20天的所有问题

     GET
    [base]/ImmunizationRecommendation?deo-number=2

    搜索任何推荐第二剂量的免疫建议

    2.21.1.4.7 日期

    日期参数搜索日期/时间或其区间。与日期/时间相关的功能通常是一样的,虽然概念是相对直接的,但在确保一致行为方面有许多微妙之处。

    日期参数格式为 yyyy-mm-ddThh:mm:ss[Z|(+|-)hh:mm] (标准 XML 格式).

    从技术上讲,任何的 date, dateTime,
    and instant
    数据类型; 例如 可以提供任意程度的精度,但应该从左边填充(例如不能指定一个月而没有一年),除非有一个小时存在,但如果时间部分存在,则应提供一个时区。注:时间可以由小时没有秒钟,不像XML
    datetime
    类型。有些用户代理可能会转意URL中的字符,服务器应该正确地处理这个问题。

    日期参数可以用下列数据类型:

    date

    该值的范围为指定的日、月或年。

    dateTime

    该值的范围如上述定义;例如,日期2013-01-10指定所有的时间从102013日零时起,立即在11201300:00

    instant

    一个时刻被认为是一个固定的时间点,其间隔小于系统的精度,即有效宽度为0的区间。

    Period

    明确的,尽管在资源上实际上并没有指定上限或下限。

    Timing

    指定的调度细节被忽略,只有外部限制事项。例如,一个时间表,规定每隔一天在20131312013324包括201321,,尽管这是一个不受期限的奇怪的一天。这是为了使服务器负载处理查询保持合理。

    隐含的是,一个缺失的下边界是小于任何实际的日期。缺失的上限是大于任何实际日期。使用前缀:

    [parameter]=eq2013-01-14

    · (正确)2013-01-14T00:00 匹配(obviously)

    · (正确)2013-01-14T10:00 匹配

    · 2013-01-15T00:00 不匹配,不在范围内

    [parameter]=ne2013-01-14

    · (正确)2013-01-15T00:00 匹配不在范围内

    · 2013-01-14T00:00 不匹配它在范围内

    · 2013-01-14T10:00 不匹配它在范围内

    [parameter]=lt2013-01-14T10:00

    · (正确)2013-01-14 匹配,因为它是201311410点前的一部分

    [parameter]=gt2013-01-14T10:00

    · (正确)2013-01-14 匹配, 因为它是201311410点后的一部分

    [parameter]=ge2013-03-14

    · (正确)”2013121包含在内,因为这段期间可能包括 2013314以后的时间

    [parameter]=le2013-03-14

    · (正确)”2013121包含在内,因为这段期间可能包括 2013314之前的时间

    [parameter]=sa2013-03-14

    · (正确)”2013315包含在内,因为这段期间开始在2013314以后

    · 2013121不包含在内,因为这段期间开始在2013314之前

    · “before and including 21-Jan 2013” is not included
    because that period starts (and ends) before 14-Mar 2013

    · 2013-1-21之前(包括2013-1-21)”不被包括,因为 这个日期段在2013-3-14之前结束

    [parameter]=eb2013-03-14

    · 2013315不包含在内,因为这段期间开始在2013314以后

    · 2013121不包含在内, 因为这段期间开始在2013314之前 ,但不会在它之前结束

    · (正确)” 2013121之前并包括2013121不包含在内, 因为这期2013314前结束

    • “before
      and including 21-Jan 2013” is not included because that period ends
      before 14-Mar 2013

    ·  

    [parameter]=ap2013-03-14

    · 2013314包含在内,非常匹配

    · 2013121不包含在内,因为非常接近 14-Mar 2013

    · 2015615 不包含在内,因为非常不接近 14-Mar 2013. 请注意,这里的确切值是由系统自行决定的。

    其他注意事项:

    · 当日期参数没有完全指定时,与它的匹配是基于间隔的行为,即:

    o    只有指定年份的日期相当于从11的第一个时刻到1231的最后一刻开始的间隔,例如 2000 等于一个间隔[2000-01-01T00:00, 2000-12-31T23:59].

    o    日期与年份和月份相当于一个间隔,从月初一天开始,到最后一天的最后一天结束,例如2000-04 相当于一个区间[2000-04-01T00:00, 2000-04-30T23:59].

    · 在可能的情况下,系统应该正确的时区在执行查询。日期没有时区,不应考虑时区。如果搜索参数和资源元素日期时间没有时区,则应假定服务器本地时区。

    寻找2年内病房内发生的的所有手续:

     GET
    [base]/Patient/23/Procedure?date=ge2010-01-01&date=le2011-12-31

    2.21.1.4.8 字符串

    对于简单的字符搜索,字符串参数作用于字符串,字符串输入不区分大小写。默认情况下,如果字段的值等于或从提供的参数值开始,则字段匹配字符串查询,两者都通过案例和重音进行了标准化。所述::contains修饰符返回结果包括字段内所提供的任何位置参数值被搜索。该:exact修饰符返回与整个提供的参数匹配的结果,包括套管和重音符。

    例子:

    [base]/Patient?given=eve

    任何名称姓名开头的名称包含“eve”的部分的患者。这将包括名称为“Eve”“Evelyn”的患者。

    [base]/Patient?given:contains=eve

    任何名称的任何患者,在任何位置都包含“eve”。这将包括给定名称为“Eve”“Evelyn”以及“Severine”的患者。

    [base]/Patient?given:exact=Eve

    任何具有某一特定名称的患者,正是“eve”。注意:这不包括名称为“eve”“EVE”的患者。

    :text可以使用 附加的修饰符来指定具有高级文本处理的搜索(见下文),尽管预期只有几台服务器可以提供此功能。

    当字符串搜索参数引用 HumanName and Address, 类型时,搜索将覆盖字符串类型的元素,并不涵盖诸如 use and period. 对于强大的搜索,服务器应独立搜索姓氏部分。例如,CarrenoQuinones搜索应该与“Carreno
    Quinones”
    的姓氏匹配。HL7附属机构可以就搜索如何在其特定文化中工作提出更具体的建议。

    是否在服务器的判断之前是否预先处理名称,地址和联系人详细信息以在匹配之前删除分隔符,以确保更一致的行为。例如,服务器可能会从电话号码中删除所有空格和字符。最适合的是不同的文化和环境。服务器还可以使用此属性的自由文本样式搜索来获得最佳效果当搜索整个名称和地址(而不是部分)时,服务器也可以使用灵活匹配或自由文本样式搜索名称以获得最佳效果。

    2.21.1.4.9 uri

    参数是指URIRFC 3986)元素。匹配是精确的(例如,案例,标注和转义)敏感,整个URI必须匹配。修饰符:above:below可用于指示使用部分匹配。例如:

     GET
    [base]/ValueSet?url=http://acme.org/fhir/ValueSet/123

     GET
    [base]/ValueSet?url=http://acme.org/fhir/

     GET
    [base]/ValueSet?url=urn:oid:1.2.3.4.5

    第一行是一个请求,以查找具有确切的URL”http://acme.org/fhir/ValueSet/123″的任何值集。第二行执行搜索,将返回具有以“http://acme.org/fhir/”开头的URL的任何值集。相反搜索给定特定网址上方的任何值集。这种方法对于搜索名称系统可能是有用的,但它通常比:below搜索不太有用。第三行显示了OID搜索的示例。

    请注意:上述和:以下修饰符仅适用于URL,而不适用于URNS(如OID)。

    请注意,对于Canonical
    URL
    ,服务器应该支持通过Canonical
    URL
    进行搜索,并且应该支持自动检测|[version]一部分作为Canonical
    URL
    的一部分,并将该部分解释为该版本的搜索。

    2.21.1.4.10 令牌 (token)

    令牌类型是提供精确匹配搜索的参数,或者是一个字符串,可能被URI限定的字符串。它主要用于一种代码或标识符数据类型,该数据类型可能具有一个限定它们含义的URI,即从编码或标识符对这对进行搜索。令牌也对其他领域的精确匹配所需的URI,布尔, ContactPoints。在这些情况下,不使用URI部分。

    对于令牌,匹配是文字的(例如,不是基于 subsumption或其他代码系统功能),但不区分大小写。要使用基于包含的逻辑,请使用下面的修饰符,或列出层次结构中的所有代码。该值的语法是以下之一:

    · [parameter]=[code]:  [code]值与Coding.codeIdentifier.value匹配的值与系统属性的值无关

    · [parameter]=[system]|[code]:  [code] 值匹配 Coding.code or Identifier.value, [system] 值匹配,标识符或编码的系统属性的值

    · [parameter]=|[code]:  [code]值匹配Coding.code
    or Identifier.value,
    Coding/Identifier 没有系统属性

    · [parameter]=[system]|:  其中[system]值与标识符或编码的系统属性匹配的任何元素

    注意:命名空间URI和代码都必须准确转义。如果系统不适用(例如uri类型的元素,那么只需使用[parameter]
    = [code]
    形式。

    令牌搜索参数用于以下数据类型:

    数据类型

    URI

    Code

    注释

    Coding

    Coding.system

    Coding.code

    CodeableConcept

    CodeableConcept.coding.system

    CodeableConcept.coding.code

    CodeableConcept中的任何编码相匹配

    Identifier

    Identifier.system

    Identifier.value

    ContactPoint

    ContactPoint.use

    ContactPoint.value

    使用由前置 http://hl7.org/fhir/contact-point-system/

    code

    (implicit)

    code

    系统在值集中定义(尽管通常不需要)

    boolean

    (implicit)

    boolean

    隐式系统是 http://hl7.org/fhir/special-values

    string

    n/a

    string

    令牌有时用于字符串,表示精确匹配是正确的默认搜索状态

    注意:对布尔域使用令牌搜索参数:布尔值“true”“false” 表示为Special
    Values
    代码系统中的格式代码,当布尔值需要以Coding数据类型表示时,这是有用的。这些代码的命名空间是http://hl7.org/fhir/special-values,尽管通常没有理由使用它,因为一个简单的真或假就足够了。

    修饰符:

    Modifier

    Use

    :text

    搜索参数被处理为一个字符串,用于搜索与代码/值相(code/value)关联的文本可以是CodeableConcept.textCoding.displayIdentifier.type.text

    :not

    反转上述段落中描述的代码匹配。请注意,这包括对参数没有值的资源例如:gendernot
    = male
    包括性别不是男性的患者,也包括根本没有标识性别的患者

    <span lang="EN-US">:above</span> The search parameter is a concept with the form <span lang="EN-US">[system]|[code]</span>, and the search parameter tests whether the coding in a
    resource subsumes the
    specified search code. For example, the search concept has an is-a relationship
    with the coding in the resource, and this includes the coding itself.
    <span lang="EN-US">:below</span> the search parameter is a concept with the form <span lang="EN-US">[system]|[code]</span>, and the search parameter tests whether the coding in a
    resource is subsumed by the specified search code. For example, the coding
    in the resource has an is-a relationship with the search concept, and this
    includes the coding itself.

    :above

    搜索参数是具有[system]|[code]形式的一个概念, 这个搜索参数测试 资源中的编码(system ,code ) 是否包括了特定的搜索编码。例如,搜索概念包含一个带有资源编码(is-a)的关系  ,并且这包括编码本身。

    :below

    搜索参数是具有[system]|[code]形式的一个概念, 这个搜索参数测试  资源中的编码(system,code) 是否被包括在特定搜索编码 (这个搜索参数测试 特定搜索编码是否包括 资源中的编码(system,code) )。例如,资源中的编码 带有搜索概念 is-a 关系,这包括编码本身。

    :in

    搜索参数是表示值集合的URI(相对或绝对),搜索参数测试编码是否在指定的值集中。引用可以是文字的(可以被找到的值集合的地址)或逻辑(对ValueSet.url的引用)。如果服务器可以将引用视为文字URL,那么它将尝试匹配已知的逻辑ValueSet.url值。

    :not-in

    搜索参数是表示值集合的URI(相对或绝对),搜索参数测试编码是否不在指定的值集中。

    大多数服务器只会处理内部已知/注册/支持的值集。但是,服务器可以选择接受对值集的任何有效引用。服务器可以在测试包含关系时选择考虑概念映射。

    示例搜索:

    搜索

    描述

     GET
    [base]/Patient?identifier=http://acme.org/patient|2345

    在系统“http://acme.org/patient”中搜索带有密码为“2345”的所有患者

     GET
    [base]/Patient?gender=male

    搜索具有代码为“male”(男性)患者

     GET
    [base]/Patient?gender:not=male

    搜索任何没有代码为“male”男性的患者

     GET
    [base]/Patient?active=true

    搜索任何有活动的患者

     GET
    [base]/Condition?code=http://acme.org/conditions/codes|ha125

    在代码系统“http://acme.org/conditions/codes”中搜索代码“ha125”的任何条件

     GET
    [base]/Condition?code=ha125

    搜索代码“ha125”的任何条件。请注意,代码系统之间的文字符号中经常没有任何有用的重叠,因此,前面的示例通常是首选的

     GET
    [base]/Condition?code:text=headache

    搜索与相关联的文本“headache”(头痛)的代码(在文本或显示中)的任何条件

     GET
    [base]/Condition?code:in=http%3A%2F%2Fsnomed.info%2Fsct%3Ffhir_vs%3Disa%2F126851005

    搜索  包含 肝脏肿瘤的所有子集的SNOMED CT “http://snomed.info/sct?fhir_vs=isa/126851005”中的任何 condition(文档资源类别)

     GET
    [base]/Condition?code:below=126851005

    搜索被 纳入 SNOMED CT Code”肝脏肿瘤编码的任何condition(文档资源类别)。注意:这是与上一个的搜索结果相同

     GET
    [base]/Condition?code:in=http://acme.org/fhir/ValueSet/cardiac-conditions

    寻找心脏病机构名单中的任何 condition(文档资源类别)

    2.21.1.4.11 数量

    数量参数用于搜索数量数据类型。值的语法如下:

    · [parameter]=[prefix][number]|[system]|[code] 与给定单位的数量相匹配

    前缀是可选的,并且如上所述,都涉及如何解释精度和比较器/范围运算符。示例搜索:

    Search

    描述

     GET
    [base]/Observation?value=5.4|http://unitsofmeasure.org|mg

    搜索所有的观测值5.4毫克,毫克是UCUM单元 (system/code)

     GET
    [base]/Observation?value=5.4||mg

    搜索所有的观测值为5.4毫克的单位无论是代码或指定的人类单位。 (unit) 是毫克

     GET
    [base]/Observation?value=le5.4|http://unitsofmeasure.org|mg

    搜索所有的小于5.4毫克观测值,毫克是UCUM单元

     GET
    [base]/Observation?value=ap5.4|http://unitsofmeasure.org|mg

    搜索所有为5.4毫克观测值,毫克是UCUM单元

    搜索处理器可以选择基于 canonical
    units
    (
    例如,在上述情况下,单位可以转换为mg的值。).

    2.21.1.4.12 引用

    引用参数是指资源之间的引用references
    between resources
    .
    例如,找到主题引用是某个特定病人的所有条件,病人根据姓名或标识符选择。引用参数的解释要么是:

    · [parameter]=[id] 使用本地引用(即相对引用)的资源的逻辑[
    id ]

    · [parameter]=[type]/[id] 当引用可以指向不同类型的资源(例如,观察对象)时,使用本地引用(即相对引用)指定类型的资源的逻辑[
    id ]

    · [parameter]=[url] 其中URL是绝对URL——由其绝对位置对资源的引用。

    注:参考解决为指定的绝对URL相同的值,反之亦然,作为一个匹配。例如,如果搜索参数值是患者/
    123
    ,则会找到像这样的引用:

     <patient>

    <reference value=”Patient/123″/>

     </patient>

    如果服务器基址是 http://example.org/fhir, 然后,参考 http://example.org/fhir/Patient/123,也就是说,搜索词也与这样的患者引用相匹配:

     <patient>

    <reference value=”http://example.org/fhir/Patient/123″/>

     </patient>

    此外,搜索 reference=http://example.org/fhir/Patient/123 也将匹配参考。

    允许参考点到多个资源类型;例如:参考(Patient|Group|Device|..)。在这种情况下,多个资源可能具有相同的逻辑标识符。服务器应该拒绝搜索,其中逻辑ID引用不同类型的多个匹配资源。为了让客户机在这些情况下执行搜索,显式指定了类型:

     GET
    [base]/Observation?subject=Patient/23

    这个搜索对象使用逻辑标识符“23”来引用病人资源的任何观察。还定义了一个修饰符,允许客户机显式地对预期类型进行定义:

     GET
    [base]/Observation?subject:Patient=23

    这具有相同的效果,以前的搜索。与下一节所解释的使用链接时,修饰符变得有用。注: [type] 修饰符不能用于引用另一个服务器上找到的资源,因为服务器通常不知道该资源具有哪些类型。然而,由于这些都是绝对引用,所以该类型不会有任何歧义。

    在某些情况下,搜索参数是用隐式限定的范围定义的。例如, Observation 有一个元素subject,这是一个参考的其中一个类型。这有一个匹配的搜索参数 subject,这是指任何可能的类型。除此之外,还有一个搜索参数 patient, 也指Observation.subject, 但仅限于包括引用类型 Patient. 当使用患者搜索参数时,不需要指定 “:Patient”作为修饰语,或 “Patient/” 在搜索的值,这必须是真的。

    2.21.1.4.13链式参数

    为了节省客户机进行一系列搜索操作,引用参数可以被链式添加一个逗点 (.),后面跟着一个为目标资源定义的搜索参数的名称。这可以递归地完成,通过逻辑路径通过相关资源图,由例如,鉴于资源报告书有一个搜索参数命名的对象,这通常是指病人资源和病人资源包括参数名称搜索病人的名字,然后搜索

     GET
    [base]/DiagnosticReport?subject.name=peter

    是一个要求返回所有的实验报告,有一个主题的名字包括“peter”。因为诊断报告主题可以是一组不同的资源,因此有必要将搜索限制为特定类型:

     GET
    [base]/DiagnosticReport?subject:Patient.name=peter

    这个请求返回所有有一个病人的实验室报告,病人的名字包括 “peter”.

    高级搜索注释:在一个链式参数搜索一个资源引用的地方,可能有一种以上资源的类型作为其目标,参数链可能最终会在同一个资源上使用同一名称的搜索参数。服务器应该拒绝一个逻辑ID指向不同类型匹配资源的搜索。例如,客户机必须在上面的第二个示例中使用语法显式地指定类型。

    2.21.1.4.14 反向(反转)链接

    _has 参数提供了有限反向链接的支持,选择基于引用(指向)它们的资源属性的资源(替代链接,参考以上,选择基于引用(指向)它们的资源属性的资源)。这里的_has参数实例:

    GET
    [base]/Patient?_has:Observation:patient:code=1234-5

    此请求要求服务器返回病人资源,其中患者资源有至少一个观察点引用,其中观察值为1234,观察点是患者搜索参数中的患者资源。

    “Or” 搜索是允许的 (e.g. GET
    [base]/Patient?_has:Observation:subject:code=123,456),
    也允许复合的多个 _has参数(例如 GET
    [base]/Patient?_has:Observation:subject:code=123&_has:Observation:subject:code=456).
    注意每个_has参数 需要独立于处理其他_has参数处理。

    _has 参数可以链接,这样:

    GET
    [base]/Patient?_has:Observation:patient:_has:AuditEvent:entity:user=MyUserId

    从一个特定用户那里获得观察结果的所有有观察结果的患者。

    2.21.1.4.15 复合搜索参数(composite

    复合搜索参数支持用一个值连接单个值 $. 例如, 搜索操作的结果是与每个搜索参数指定的条件相匹配的资源的交集。如果一个参数重复,例如 /Patient?language=FR&language=NL, 然后匹配一个会说两种语言的病人。这被称为一个”and“与的搜索参数,因为服务器只能响应与这两个值都同时匹配的结果

    相反,如果搜索是寻找能说两种中任何一种语言的病人,那么这是一个具有多个值的单参数,由一个逗号”,“分隔。例如, /Patient?language=FR,NL. 这被称为 Or“或 的搜索参数,因为服务器将响应与这两个值中任何一个匹配的结果。

    and 与参数和 或”or“参数也可以合并,例如:/Patient?language=FR,NL&language=EN 会讲英语的病人,同时也会法语或荷兰语

    这种方法允许简单的 /(and/or) 组合,但不允许基于一对值的搜索,如钠值>
    150 mmol/L
    的所有的观察条目(特别是作为链状搜索的结束标准),或搜索哪里你需要找到一个结合的键/值的group.characteristic不是一个键和值(key/value)分离的交集。另一个例子是进行地理搜索时的空间坐标。

    为了允许这些搜索,资源还可以指定复合参数,该参数采用与其他定义参数匹配的单个值序列作为参数。在这个参数的定义中记录了这样一个序列中每个组件的匹配参数。这些序列是通过将单个值与$ 连接的.

    注意:这个序列是一个单独的值,它本身可以组成一组值,因此,多个匹配状态日期参数可以指定为state-on-date=new$2013-05-04,active$2013-05-05.

    注:不能对参数使用复合修饰符。

    使用复合参数的例子:

    Search

    描述

     GET
    [base]/DiagnosticReport?result.code-value-quantity=http://loinc.org|2823-3$gt5.4|http://unitsofmeasure.org|mmol/L

    所有的诊断报告,包含有>5.4 mmolL钾值观察搜索(UCUM

     GET
    [base]/Observation?component-code-value-quantity=http://loinc.org|8480-6$lt60

    搜索所有的收缩压为60的观察值。注意,在这种情况下,假定为单位。(everyone uses mmHg)

     GET
    [base]/Group?characteristic-value=gender$mixed

    搜索具有“mixed”文本值的具有“gender”特征的所有组

    2.21.1.4.16 缺失数据处理

    考虑搜索所有allergyintolerance(过敏不耐受)资源的情况下:

    GET
    [base]/AllergyIntolerance?clinical-status=active

    这种搜索将只返回有值资源的临床状态:

    {

    “resourceType” : “AllergyIntolerance”,

    “clinicalStatus” : “active”

    }

    缺少临床状态资源将不返回。这可能是不安全的,忽略一个未知临床状态警告的 allergyintolerance(过敏不耐受资源)资源,并只返回具有明确的临床状态的资源,这是不恰当的。相反,理想的情况应该是有无确切临床状态的allergyintolerance资源都可以返回:

    GET
    [base]/AllergyIntolerance?clinical-status=active

    GET
    [base]/AllergyIntolerance?clinical-status:exists=false

    请注意,这是两个独立的查询。他们可以联合在一个批处理中处理(combined
    in a batch
    , 但不是一个单一的操作。这个查询总是返回一个空列表,因为任何资源都不能同时满足这两个标准:

    GET
    [base]/AllergyIntolerance?clinical-status=active&clinical-status:exists=false

    无法使用 :exists 修饰符和一个带有逗号语法的混合体用在复合搜索参数上。

    另一种方法是使用 _filter参数,服务器支持此参数。

    2.21.1.4.17 转义的搜索参数

    在上述规则”$“”,“”|“是特殊规则定义的字符。因而,如果这些字符出现在一个实际的参数值中,它们必须区别于它们作为分隔符的使用。当所有这些字符出现在一个实际的参数值,它们必须添加一个用在本身的”\“字符作为前缀。因此,param=xxx$xxx表明它是一个复合的参数,而param=xx\$xx 的意思是参数值就等于 文本 xx$xx”xx\xx是违法的,参数值的param=xx\\xx 表达的就是 “xx\xx表示文字值。

    本规范为此定义了额外的转义形式。经典 %xx 对正常的http
    URLS
    部分进行转义去确保了在fhir服务器上的正确性,而,相对于此“\”的转义变得非常重要,一旦它到达服务器变可以被查询解析。因此:

    GET
    [base]/ValueSet?url=http://acme.org/fhir/ValueSet/123,http://acme.org/fhir/ValueSet/124%2CValueSet/125

    使用URL转意,确保fhir服务器接收:

    GET
    [base]/ValueSet?url=http://acme.org/fhir/ValueSet/123,http://acme.org/fhir/ValueSet/124,125

    这个请求将比较URL与三个值:最后一个是相对的和不正确的URL,这很可能不是实际意图。然而:

    Fhir 转义

    GET
    [base]/ValueSet?url=http://acme.org/fhir/ValueSet/123,http://acme.org/fhir/ValueSet/124\,125

    相当于:

    URL 转义

    GET
    [base]/ValueSet?url=http://acme.org/fhir/ValueSet/123,http://acme.org/fhir/ValueSet/124\%2C125

    这意味着:
    url =
    http://…..123 http://….124,125.

    2.21.1.4.18 文本搜索参数

    特殊文本的搜索参数 _text and _content, 分别对资源的叙事和资源的全部内容进行检索。这些参数应该支持典型的文本索引服务所提供的类型的高级搜索功能。该参数的值是一种基于搜索的文本,它可能涉及使用词库和接近性的考虑搜索多个单词,以及例如和或等的逻辑操作:

     GET
    [base]/Condition?_text=(bone OR liver) and metastases

    这个请求在叙述中返回转移一词和的所有条件资源。服务器可以选择搜索相关词

    STU Note: 围绕标准化文本搜索的问题尚未完全解决。该规范的试用期间,我们建议系统使用的为搜索参数指定的规则式规范。典型的实现将使用Lucene、基于SQL的全文搜索或一些索引服务。

    2.21.1.4.19 搜索列表

    The <span lang="EN-US" style="font-family: Menlo;">_list</span> parameter allows for the retrieval of resources that
    are referenced by a 
    List resource.

    _list 参数允许检索由列表资源引用的资源

     GET
    [base]/Patient?_list=42

    此请求返回从[base]/List/42)List.entry.item列表中引用的所有患者资源。循环检索列表,然后重复取出每个病人条目,使用指定额外的搜索条件搜索条件,例如:

     GET
    [base]/Patient?_list=42&gender=female

    这项要求将把所有女性患者纳入名单。服务器可以将搜索参数中引用的列表作为一个包含的资源返回,但不需要这样做。此外,系统还可以通过逻辑功能支持列表搜索。例如:

     GET
    [base]/AllergyIntolerance?patient=42&_list=$current-allergies

    这一要求将返回42号病人的当前过敏名单current-allergies中的所有过敏。服务器返回的所有相关allergyintolerance资源,也可以选择返回列表。有关进一步的信息,请definition
    of “$current-allergies”
    ,
    以及 List
    Operation “Find”
    。注意:服务器不需要将这些列表作为列表资源提供给客户机,但可以选择这样做。

    2.21.1.4.20 高级筛选

    上面所描述的搜索机制是灵活的,简单的例子很容易实现,但在表达组合查询的能力上受到限制。为了配合这一机制,一个“_filter”搜索表达式的参数可以用。

    例如,
    找到所有与名字包括peter 并且LOINC 代码为 1234-5病人的记录

    GET
    [base]/Observation?code=http://loinc.org|1234-5&subject.name=peter

    使用 _filter 变更,搜索可以这样表示:

    GET [base]/Observation?_filter=name
    eq http://loinc.org|1234-5 and subject.name co “peter”

    _filter 参数描述了 “_Filter
    Parameter” page
    .

    2.21.1.4.21 指定资源的类型

    通常,对已知类型的资源进行搜索,例如:

    GET
    [base]/Observation?params…

    然而,在某些情况下,在没有固定类型资源的情况下执行搜索:

    · 在所有资源类型使用搜索 (GET [base]?params…)

    · 使用带有的消息(messaging)搜索

    · 其他服务中的一些搜索规范,如决策支持使用(decision support usage

    在这种情况下,搜索条件可能需要指定应用于搜索的一种或多种资源类型。这可以通过使用_type参数做:

    GET
    [base]/?_type=Observation,Condition&other params…

    注意,可以在全局搜索中使用的唯一搜索参数是适用于所有资源的基本参数。在其他情况下,对多种类型的搜索可能允许特定于资源的搜索参数,但在这些情况下,需要有实施经验的来确定正确的行为。

    技术上,_type 变更是一个基于 Resource
    Types
    值集上的令牌(token)变量

    2.21.1.5 管理返回的资源

    2.21.1.5.1 排序

    客户可以利用参数_sort返回结果的顺序,它可以包含一个以逗号分隔的列表排序规则的优先顺序:

    GET
    [base]/Observation?_sort=status,-date,category

    逗号分隔列表中的每个项都是一个搜索参数,可选地带有“-“前缀。前缀表示递减的顺序;在缺少的情况下,该参数应用于递增顺序。

    笔记:

    · 排序时,实际使用的排序值不会由服务器显式地返回给每个资源,也就是资源内容。

    · 要排序的相关性,使用_score

    · 服务器返回作为返回的搜索参数的一部分执行的排序(如下所示)。

    · 搜索参数可以引用重复的元素,因此单个资源的给定搜索参数可以有多个值。在这种情况下,排序是基于在返回指定资源时,以指定排序顺序最早出现的一组多个参数中的项。

    · 在对字符串搜索参数进行排序时,应在区分大小写的基础上进行排序。重音可以被忽略或按领域约定进行排序。

    · 本规范没有规定强制排序在服务器的一致性规则。一般来说,这被认为与过滤的一致性是不必要的(尽管这只是一个小的变量)。分类的目的是以合理的顺序为最终用户提供数据。合理可能因用例和领域而异,特别是重音字符。

    2.21.1.5.2 页数

    为了使客户机、服务器和网络的负载最小化,服务器可以选择在一系列页面中返回结果。搜索结果集包含客户端用来从搜索集中请求额外页面的URL。对于一个简单的REST搜索,页面链接contained
    in the returned bundle as links
    .
    通常,在检索页面时,服务器将在其用于管理搜索状态的链接中提供自己的参数。这些参数不需要由客户机理解或处理。 参数_count定义为一种暗示,有关多少资源应该在一个单一的页面返回的服务器。服务器不应返回比请求更多的资源,即使它们不支持分页,但也允许返回小于客户端请求的资源。服务器应该重复原_count参数在其返回的页面的链接,这样后续的寻呼请求履行原来的_count。注意:在搜索过程中,如何处理资源的持续更新取决于搜索引擎。 注:对_sort_count可只返回最新的资源,满足特定的标准设定的标准,然后按日期降序排列,与_count
    = 1
    。这样,最后将返回匹配的资源。 如果_count的值为0,这将被视为_summary=count 服务器捆绑,报道资源,匹配在Bundle.total的总数,但没有记录,没有一张//最后的联系。请注意,Bundle.total只包括匹配的资源总数。这不算额外的资源,如 OperationOutcome included ,也可能返回的资源。

    2.21.1.5.3 包括其他资源结果 (_include and _revinclude)

    An alternative scenario is
    where the client wishes to fetch a particular resource, and any resources that
    refer to it. For example, the client may wish to fetch a MedicationRequest, and
    any provenance resources that refer to the prescription. This is known as a
    reverse include, and is specified by providing a 
    _revinclude parameter.

    Both _include and _revinclude are
    based on search parameters, rather than paths in the resource, since joins,
    such as chaining,
    are already done by search parameter.

    Each _include parameter specifies a search parameter to join on:

    客户可以要求引擎返回与搜索结果相关的资源,以减少对相关资源重复检索的网络延迟。当客户端在临床资源上搜索时,这是非常有用的,但对于返回的每一个这样的资源,客户也需要临床资源引用主题(病人)的资源。客户端可以使用_include参数表明,这个项目资源应包含病人信息在结果中。

    另一种场景是 客户端希望获取特定资源的地方 以及引用该特定资源的任何资源。例如,客户可能希望获取MedicationRequest资源 以及引用处方(prescription)的任何来源(出处)的资源。这被称为反向包括,并且通过提供_revinclude参数来指定 _include and _revinclude 是基于搜索参数的,除非在资源中表明了路径,如链接(chaining),或者搜索参数定义的

    每个特定的_include 参数连接到搜索参数中:

     GET
    [base]/MedicationRequest?_include=MedicationRequest:patient&criteria…

     GET
    [base]/MedicationRequest?_revinclude=Provenance:target&criteria…

    The first search requests all matching
    MedicationRequests, to include any patient that the medication prescriptions in
    the result set refer to. The second search requests all matching prescriptions,
    return all the provenance resources that refer to them.

    第一个搜索请求所有匹配的MedicationRequests 资源,以及包括结果集中的药物处方引用的任何患者。第二个搜索请求所有匹配的处方,返回引用它们的所有来源(出处)资源

    两个参数值_include_revinclude有三个部分,用一个分隔符 :

    1. The name of the source resource from which the join comes

    2. The name of the search parameter which must be of type reference

    3. (Optional) A specific of type of target resource (for when the search
    parameter refers to multiple possible target types)

    1. 来自其的源资源的名称

    2. 搜索参数的名称必须是引用类型

    3. (可选)特定的目标资源类型(搜索参数引用多个可能的目标类型时)

    _include_revInclude参数不包括多个值。相反,对于每个不同的包括标准重复参数。

    For each returned resource,
    the server identifies the resources that meet the criteria expressed in the
    join, and adds to the results, with the entry.search.mode set
    to “include” (in some searches, it is not obvious which resources are
    matches, and which are includes). If there is no reference, or no matching
    resource, the resource cannot be retrieved (e.g. on a different server), then
    the resource is omitted, and no error is returned.

    The inclusion process can be
    recursive, if the modifier 
    :recurse is
    included. For example, this search returns all Medication Request resources
    and their prescribing
    Practitioner
    Resources for the matching Medication Dispense resources:

    对于每个返回的资源,服务器辨别出 满足在(join)中表达的标准 的所有资源,并将其添加到结果中,带有entry.search.mode 的设置为“include”(在某些搜索中,不清楚哪些资源匹配,哪些资源包括其中)。 如果没有引用,或没有匹配的资源,资源则不能被获取(例如在不同的服务器上),则省略资源,并且不返回错误。

    如果包含修饰符(:recurse),则包含过程可以是递归的。例如,此搜索返回所有药物治疗申请(Medication
    Request
    )资源及其 匹配的药物分配(Medication
    Dispense
     
    )资源 的处方医师 prescribing Practitioner)资源:

     GET
    [base]/MedicationDispense?_include=MedicationDispense:authorizingPrescription

    &_include:recurse=MedicationRequest:prescriber&criteria…

    This technique applies to circular
    relationships as well. For example, the first of these two searches includes
    any related observations to the target relationships, but only those directly
    related. The second search asks for the 
    _include based on related parameter to be executed recursively, so
    it will retrieve observations that are directly related, and also any related
    observations to any other included observation.

    此技术也适用于循环关系。例如,这两个包括搜索中的第一个 指的是 与目标关系的任何相关观察结果,但只包括直接相关的观察结果。 第二个搜索要求_include基于related参数递归执行,因此它将检索直接相关的观察结果,以及与任何其他观察结果相关的任何相关观察结果。

    GET
    [base]/Observation?_include=Observation:related-target&criteria…

    GET
    [base]/Observation?_include:recurse=Observation:related-target&criteria…

    二者_include   _revInclude用通配符“*”的搜索参数名,表示该类型的任何搜索(type=reference)被包括在内。虽然客户端和服务器在执行此操作时需要注意不要求或返回太多的资源。最值得注意的是,使用递归包含可能导致检索完整患者的记录,甚至更多:将资源组织到互连网络中,并且广泛的_include路径可能最终遍历服务器上的所有可能的路径。对于服务器,这些递归和通配符_include都很苛刻,可能会显着减慢搜索响应时间。

    在服务器的酌情决定下,如何深度地递归地评估内含物。服务器有望将迭代次数限制在适当的级别,并且不需要遵守在搜索结果中包含其他资源的请求。

    当搜索结果被分页时,搜索结果的每一页应包括每个页面中的资源的匹配包,使得每个页面独立于一个连贯的包。

    · 2.21.1.5.4 包含资源 (是DomainResource 中的元素:Contained 是引用(Reference )类型

    By default, search results only include
    resources that are not contained in other resources. A chained condition will
    be evaluated inside contained resources. To illustrate this, consider a
    MedicationRequest resource that has a contained Medication resource specifying a
    custom formulation that has ingredient with a 
    itemCodeableConcept “abc” in
    “http://acme.com./medications”. In this case, a search:

    默认情况下,搜索结果只包含其他资源中不是contained 的资源。一个链状条件表达(Url表达: MedicationRequest?medication.ingredient-code)将被认(评估)为是内部包含资源(Contained 的元素)。 为了说明这一点,认为一个拥有contained 元素的Medication 元素的 MedicationRequest资源(MedicationRequest.Medication.Contained:元素的树状结构) 详细叙述了 一个定制处方(定制配方)中(“http://acme.com./medications”)包含一个 “abc”(药名) itemCodeableConcept(内部数据的一个条目) 的成分    在这种情况下,搜索:

    GET
    MedicationRequest?medication.ingredient-code=abc

    在结果中将包含medicationrequest资源。然而,这个搜索:

    GET
    Medication?ingredient-code=abc

    will not
    include the contained Medication resource in the results, since either the
    wrong type of resource would be returned, or the contained resource would be
    returned without its container resource, which provides context to the
    contained resource.

    将不会在结果中包含contained Medication资源,此后将返回”错误的资源类型”提示,或者将返回一个没有contained 的资源,对contained 的资源提供上下文。

    客户端可以使用_contained参数修改此行为,该参数可以具有以下值之一:

    · false(默认):不返回contained 的资源

    · true:只返回contained 的资源

    · both:返回 contained 没有 contained 的(正常)资源

    当返回contained 的资源时,服务器应该返回容器资源 contained 资源。 客户端可以通过使用_containedType可以具有以下值之一的参数来指定哪一个:

    · containerdefault):返回容器资源

    · contains:仅返回包含的资源

    返回容器资源时,服务器将其简单的放在搜索结果中:

    <Bundle>

      …

    <entry>

    <resource>

    <MedicationRequest>

    <id value=”23″>

    ….

    <contained>

    <Medication>

    <id value=”m1″>

    </Medication>

    <contained>

    </MedicationRequest>

    </resource>

    <search>

    <mode value=”match”/>

    </search>

    </entry>

    </Bundle>

    在返回容器资源的情况下,如图所示,服务器将填充entry.search.mode元素,以便客户端可以分开匹配并包含(因为通常按类型执行的方法可能不起作用)。

    如果返回类型是包含的资源,则必须略有不同

    <Bundle>

      …

    <entry>

    <fullUrl value=”http://example.com/fhir/MedicationRequest/23#m1″/>

    <resource>

    <Medication>

    <id value=”m1″>

    </Medication>

    </resource>

    <search>

    <mode value=”match”/>

    </search>

    </entry>

    </Bundle>

    在这种情况下,这个 fullUrl告知客户端这是一个contained 的资源,连同表示包含资源的标识

    2.21.1.5.5 外部引用

    如果_include路径选择引用另一个服务器上的资源的引用,服务器可以选择将该资源包含在搜索结果中,以方便客户端。

    如果_include路径选择引用不是资源的实体(例如图像附件)的引用,则服务器也可以选择将返回的结果中包含为二进制资源。 例如,包含路径可能指向附件,通过引用,如下所示

     <content>

    <contentType>image/jpeg</contentType>

    <url>http://example.org/images/2343434/234234.jpg</url&gt;

     </content>

    服务器可以检索此引用的目标,并将其添加到结果中以方便客户端

    2.21.1.5.6分页

    当返回使用_include资源进行搜索的分页结果时,与_include为页面返回的主资源相关的所有资源都应该作为同一页面的一部分返回,即使之前已经返回过某些资源实例。 这种方法允许发件人和接收方避免缓存其他页面的结果

    2.21.1.5.7总结

    客户端可以通过使用以下参数来请求服务器仅返回一部分资源_summary:

    GET [base]/ValueSet?_summary=true

    _summary参数请求服务器返回资源的子集。它可以包含以下值之一

    true

    在资源的基本定义中只返回标记为“summary”的元素(请参阅 ElementDefinition.isSummary

    text

    只返回“text”元素,‘id’元素,‘meta’元素,只返回顶级的必需元素

    data

    移除文本的元素

    count

    仅搜索:只返回匹配资源的计数,而不返回实际匹配

    false

    返回资源的所有部分

    _summary参数的目的是减少服务器,客户端和它们之间的资源(如网络)的总处理负载。它对于大型资源最有用,特别是包含可能重复多次的图像或元素的资源。摘要形式的目的是允许客户端快速检索大量资源,并让用户选择合适的资源。定义一个元素的摘要,以允许用户快速排序和过滤资源,并且通常在用户选择资源时将检索整个资源的基础上省略重要内容。

    服务器没有义务按要求返回摘要。为资源定义的只有有限数量的汇总表,以便服务器可以提前存储汇总的表单。服务器应该使用标记SUBSETTED 来标记资源,以确保不完全资源用于覆盖完整的资源。

    请注意,_include_revinclude参数不能混合使用_summary=text.

    STU注意: 关于每个资源的摘要中的哪些元素的定义有一些开放的问题。 现有定义有两种问题:

    · 元素被标记为包含在摘要,但它们的父元素不是

    · 元素具有最小基数> 0,但不包括在摘要中(并且它们的父元素是)所以资源资源不会是模式有效的

    这些问题将在FHIR Release 4中得到解决。同时,实施者可以选择覆盖哪些元素被标记为包含在摘要中,并且实现可能会有所不同。

    哪些元素应该是在总结反馈是欢迎在这里

    2.21.1.5.8 元素集

    如果上面定义的一个摘要视图不合适,客户端可以使用_elements参数来请求作为资源一部分的特定元素集

    GET [base]/Patient?_elements=identifier,active,link

    _elements参数由逗号分隔的基本元素名称列表组成,例如在资源的根级别定义的元素。只返回被列出的元素。客户端应该将资源中的所有强制和修饰符元素列为元素列表的一部分。元素列表不适用于包含的资源(included resources.)

    服务器不必真的仅返回所请求的元素。服务器应始终返回强制性元素,无论它们是否被请求。服务器应该使用带有tag SUBSETTED(子集)的标记资源,以确保不完全资源不会覆盖完整的资源。

    2.21.1.5.9 相关性

    在搜索指定非确定性排序的情况下,搜索算法可以生成某种排名分数,以指示哪些资源比其他资源更符合指定的标准。 服务器可以在entry.score返回此分数

    <entry>

    <score value=”.45″/>

    <Patient>

    … patient data …

    </Patient>

    </entry>

    分数是十进制数,其值介于(和包括)01之间,其中1是最佳匹配,0是最不匹配的

    2.21.1.6 服务器一致性

    为了让客户对服务器使用哪些搜索参数作为标准有信心,服务器应返回实际用于处理搜索的参数。应用程序处理搜索结果请在必要时检查这些返回的值。例如,如果服务器不支持搜索中指定的某些过滤器,客户端可能会手动将这些过滤器应用于检索到的结果集,向用户显示警告消息或执行其他操作。

    RESTful搜索的情况下,这些参数在返回的包中的自我链接中进行编码:

      <link>

    <relation value=”self”/>

    <url value=”http://example.org/Patient?name=peter”/>

    </link>

    在其他方面,服务器在支持搜索方面有相当的自由裁量权:

    · 服务器可以选择要支持的参数(不同于<span lang="EN-US">_id</span>以上)。

    · 服务器可以选择何时和何地实现参数链接,以及何时和何地支持<span lang="EN-US">_include</span>参数。

    · 服务器能够在其Capability语句引用的配置文件中声明其他参数。服务器应定义以” – “字符开头的搜索参数,以确保所选择的名称不会与本规范定义的未来参数冲突。

    · 服务器不需要对参数名称执行区分大小写,尽管名称区分大小写(URL通常区分大小写)。

    · 服务器可以选择要返回多少结果,尽管客户端可以使用<span lang="EN-US">_count</span>如上

    · 服务器可以选择如何排序返回结果,尽管他们应该尊重<span lang="EN-US">_sort</span>参数。

     


     

    2.21.1.7 高级搜索

    上述搜索框架是一种基于索引标准提供简单搜索的有用框架,但需要更复杂的查询功能来处理精确查询,基于复杂决策支持的请求以及具有人类解析度的直接查询。

    更高级的搜索操作由_query参数指定 

         GET [base]/Patient?_query=name&parameters...

    _query参数命名一个描述特定查询操作的自定义搜索配置文件。命名查询可以定义与该特定命名查询一起使用的其他命名参数。服务器可以使用OperationDefinition定义自己的附加命名查询来满足自己的用途。

    _query在一组搜索参数中 只能有一个参数。处理搜索请求的服务器如果无法识别_query参数值,则拒绝处理搜索请求

    2.21.1.8 搜索结果的时效性

    搜索操作的结果只能在执行操作时保证是最新的。执行操作后,对执行搜索的资源执行的持续操作将使结果日益陈旧。这一点的意义取决于搜索的性质,以及由结果使用的种类。

    当服务器在一系列页面中返回结果时,这尤其重要。在搜索进行期间,搜索引擎如何处理资源的持续更新。

    注意:执行搜索操作不会更改服务器上的资源集,除了创建审核事件资源以审核搜索本身。

    2.21.1.9 汇总表

    所有资源定义的通用参数:

    名称

    类型

    描述

    路径

    _id

    token

    资源ID(不是完整的URL

    Resource.id

    _lastUpdated

    date

    最后更新日期 服务器对边界精度有自由裁量权

    Resource.meta.lastUpdated

    _tag

    token

    按资源标签进行搜索

    Resource.meta.tag

    _profile

    uri

    搜索用配置文件标记的所有资源

    Resource.meta.profile

    _security

    token

    按安全标签进行搜索

    Resource.meta.security

    _text

    string

    文本搜索反叙述

    _content

    string

    针对整个资源进行文本搜索

    _list

    string

    提名列表中的所有资源(按ID,而不是完整的URL

    _query

    string

    自定义命名查询

    搜索控制参数:

    名称

    类型

    描述

    可接受的内容

    _sort

    string

    排序结果排序(可重复内部排序)

    有效搜索参数的名称

    _count

    number

    每页结果数

    完整的号码

    _include

    string

    搜索结果中包含搜索匹配的其他资源指向

    SourceType:searchParam(:targetType)

    _revinclude

    string

    引用搜索匹配时要包含在搜索结果中的其他资源

    SourceType:searchParam(:targetType)

    _summary

    string

    只返回摘要元素(对于定义的资源)

    true | false (默认为false)

    _contained

    string

    是否返回搜索匹配中其他资源中包含的资源

    true | false | both(默认为false)

    _containedType

    string

    如果返回包含的资源,是否返回包含或容器资源

    container | contained

    搜索参数类型和数据类型之间的交叉映射:

    数据类型

    number

    date

    string

    token

    reference

    quantity

    uri

    boolean

    N

    N

    N

    Y .
    true|false (System = http://hl7.org/fhir/special-values
    通常不需要)

    N

    N

    N

    code

    N

    N

    N

    Y .
    (System,
    如果需要,系统在eeach代码的基础值集中定义)

    N

    N

    N

    date

    N

    Y

    N

    N

    N

    N

    N

    dateTime

    N

    Y

    N

    N

    N

    N

    N

    decimal

    Y

    N

    N

    N

    N

    N

    N

    instant

    N

    Y

    N

    N

    N

    N

    N

    integer

    Y

    N

    N

    N

    N

    N

    N

    string

    N

    N

    Y

    Y

    N

    N

    N

    uri

    N

    N

    N

    N

    Y

    N

    Y

    Address

    N

    N

    Y 在地址中的任何字符串元搜索

    N

    N

    N

    N

    Annotation

    N

    N

    N

    N

    N

    N

    N

    CodeableConcept

    N

    N

    N

    Y

    N

    N

    N

    Coding

    N

    N

    N

    Y

    N

    N

    N

    ContactPoint

    N

    N

    N

    Y

    N

    N

    N

    Duration

    Y

    N

    N

    N

    N

    N

    N

    HumanName

    N

    N

    Y 搜索名称中的任何字符串元素

    N

    N

    N

    N

    Identifier

    N

    N

    N

    Y

    N

    N

    N

    Period

    N

    Y

    N

    N

    N

    N

    N

    Quantity

    N

    N

    N

    N

    N

    Y

    N

    Range

    N

    N

    N

    N

    N

    N

    N

    Reference

    N

    N

    N

    N

    Y

    N

    N

    SampledData

    N

    N

    N

    N

    N

    N

    N

    Timing

    N

    Y

    N

    N

    N

    N

    N

    • 该话题由  wyp 于 1 年, 5 月 前 修正。
    • 该话题由  admin 于 1 年, 2 月 前 修正。
正在查看 1 帖子:1-1 (共 1 个帖子)

抱歉,回复话题必需登录。