[英]How to create advanced subscriptions expression at Orion Context Broker NGSIv2?
根据Orion Context Broker NGSIv2的官方文档 :
您可以在条件中包含过滤表达式。 例如,不仅要通知压力是否有变化,而且是否在700-800范围内变化。 这是一个高级主题,请参阅NGSIv2规范中的“订阅”部分。
在NGSIv2订阅中没有诸如notifyConditions
类的notifyConditions,它被subject.condition对象替换:
condition
:触发通知的条件。 此字段是可选的,它可能包含两个属性,都是可选的:
attrs
:属性名称数组
expression
:由q
,mq
,georel
,geometry
和coords
组成的表达式(请参阅上面关于此字段的“List entities”操作)
当我们使用subject.condition.attrs
,它包含一个属性名称数组,这些名称定义了“触发属性”,即由于实体创建或更新而创建/更改时触发通知的属性。
但是,对于subject.condition.expression
,在官方文档中没有示例。
获取拼图可以推断:
subject.condition.expression
和subject.condition.attrs
结合起来。 如果我设置和表达不同的表达式,例如。 attr foo表达'boo> 10'它会做什么? 这会像OR
还是AND
? OR
还是AND
? 将这些更复杂的订阅的一些示例与订阅中的实体分隔的不同方式相结合将会很不错。
注意:此问题与Orion版本1.7.0+有关
我认为以下示例来自NGSIv2开发人员概述已经知道NGSIv1演示文稿(当前版本中的幻灯片34),可能有助于澄清。
例如 :订阅加快在任何类型的载体(如RoadVehicle,AirVehicle等)每当速度大于90的平均元数据80和90并马德里市中心的车辆距离小于之间结束的任何实体的变化100公里
请求:
POST /v2/subscriptions
...
{
"subject": {
"entities": [
{
"idPattern": ".*",
"typePattern": ".*Vehicle"
},
],
"condition": {
"attrs": [ "speed" ],
"expression": {
"q": "speed>90",
"mq": "speed.average==80..100",
"georel": "near;maxDistance:100000",
"geometry": "point",
"coords": "40.418889,-3.691944"
}
}
},
...
}
如本例所示,您可以使用不同的条件( q
, mq
,geoquery等),它们在AND意义上进行解释。 Morevoer, q
和mq
允许在AND意义上解释的复杂表达式,例如:
"q": "speed>90;engine!=fail",
请注意, q
和mq
出现在订阅expression
遵循的规则与它们出现在同步查询中的规则相同(即GET /v2/entities?q=...
)。 这些规则在NGSIv2规范的 “简单查询语言”部分中描述 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.