Как я могу использовать переменную / функцию в структурированном запросе, используя процессор Query Marklogic в Apache NiFi? - PullRequest
0 голосов
/ 12 июня 2019

Я хочу запросить 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 Ответ

1 голос
/ 12 июня 2019

Вы можете использовать Язык выражений , чтобы заполнить текущее время в любом формате, который вы хотите, в свойстве Запрос процессора QueryMarklogic.

Что-то вроде:

<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(), вычитает 3 минуты (3 минуты * 60 секунд / мин * 1000 миллисекунд / секунду = 180000 миллисекунд) черезminus(), а затем выражает дату в определенном формате.Вы можете изменить эти выходные данные так, как вам нужно, используя Java SimpleDateFormat коды .

...