我如何在 Apache NiFi 中使用 Query Marklogic 处理器在结构化查询中使用 variable/function?

How can i use variable/function in structured query using Query Marklogic processor in 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>

您可以使用 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 seconds/min * 1000 milliseconds/second = 180000 毫秒),以及然后以特定格式表示日期。您可以使用 Java SimpleDateFormat codes 将输出更改为您需要的任何内容。