如何使用Apache NiFi中的查询Marklogic处理器在结构化查询中使用变量/函数?

时间:2019-06-12 12:14:56

标签: marklogic apache-nifi

我想查询marklogic以获取集合中最近3分钟内已更新的文档。

我尝试为该要求编写结构化查询,但该查询仅接受dateTime的硬编码值,而不接受fn:current-dateTime()函数。下面是我尝试过的。

<query xmlns="http://marklogic.com/appservices/search">
    <and-query>
         <collection-query>
             <uri>live</uri>
         </collection-query>
         <range-query type="xs:dateTime">
             <element ns="" name="created-on"/>
             <value>2019-06-10T10:36:14.002101Z</value>
             <range-operator>GT</range-operator>
         </range-query>
    </and-query>
</query>

我希望这样-

<query xmlns="http://marklogic.com/appservices/search">
    <and-query>
         <collection-query>
             <uri>live</uri>
         </collection-query>
         <range-query type="xs:dateTime">
             <element ns="" name="created-on"/>
             <value>{fn:current-dateTime() - xs:dayTimeDuration("PT3M")}</value>
             <range-operator>GT</range-operator>
         </range-query>
    </and-query>
</query>

1 个答案:

答案 0 :(得分:1)

您可以使用Expression LanguageQueryMarklogic处理器的 Query 属性中以所需的任何格式填充当前时间。

类似的东西:

<query xmlns="http://marklogic.com/appservices/search">
    <and-query>
         <collection-query>
             <uri>live</uri>
         </collection-query>
         <range-query type="xs:dateTime">
             <element ns="" name="created-on"/>
             <value>${now():minus(180000):format('YYYY-MM-dd HH:mm:ss.SSS')}</value>
             <range-operator>GT</range-operator>
         </range-query>
    </and-query>
</query>

该表达式通过now()获取当前时间,通过minus()减去3分钟(3分钟* 60秒/分钟* 1000毫秒/秒= 180000毫秒),然后以具体格式。您可以使用Java SimpleDateFormat codes将输出更改为所需的输出。