Nano Hash - криптовалюты, майнинг, программирование

Marklogic подсчитывает старые документы с помощью cts: поиск по FLWOR

Вопрос по использованию cts: поиск по FLOWR. У меня есть xqy, который просматривает все документы в базе данных и проверяет элемент с меткой времени. Мы создали эту отметку времени при вставке документа. Цель - удалить документы старше x дней.

Теперь мне нужно знать, сколько у меня документов старше x дней, чтобы я мог попробовать выполнить задание CORB по их удалению.

Мой запрос пока работает:

xquery version "1.0-ml";
declare namespace j = "http://marklogic.com/xdmp/json/basic";
declare namespace dikw = 'http://www.example.com/dikw_functions.xqy';

(:let $foo := cts:uris((),(), cts:not-query(cts:element-query(xs:QName("j:dikwmetadata"), cts:element-query(xs:QName("j:data"), cts:and-query(()))))):)
let $uris := cts:uri-match("/twitter/*")[1 to 10]
let $today := fn:current-date()
let $days := xs:dayTimeDuration("P30D")

let $today_minus_x := xs:dateTime($today - $days)

for $uri in $uris (:cts:search(doc(), $random-query):)
    let $doc_dikw_date := xdmp:parse-dateTime("[Y0001]-[M01]-[D01] [h01]",xs:string(fn:doc($uri)//j:dikwmetadata//j:timestamp))
    let $to_old := if ($today_minus_x >= $doc_dikw_date)
    then
        true() (: deleted document:)
    else
        false()

return ($uri,$to_old) 

Это работает нормально, но мне нужно знать, сколько их осталось, чтобы увидеть, смогу ли я запустить его из консоли запросов или что мне нужно настроить запланированное задание CORB, выполняющееся каждый день.

Я искал в cts: search что-то вроде:

(:
let $uris2 := cts:search($uris,cts:query(xdmp:parse-dateTime("[Y0001]-[M01]-[D01] [h01]",xs:string(fn:doc($uris)//j:dikwmetadata//j:timestamp))) < $today_minus_x)
:)

Но, кажется, нужны элементы ... нет, я застрял.

Вопросы: есть ли более простой способ найти и подсчитать все документы старше x дней?


Ответы:


1

Одна из проблем с вашим текущим кодом заключается в том, что вы анализируете даты во время выполнения. Это всегда будет медленным, потому что для этого нужен доступ к самому XML.

Это будет работать лучше всего, если ваш элемент j: timestamp будет содержать строку, соответствующую xs: date или xs: dateTime. Затем вы можете объявить индекс диапазона (путь) для этого элемента типа date / dateTime (что вам больше подходит).

Альтернативой является создание чего-то вроде атрибута iso-date (Time) для этого элемента, содержащего предварительно обработанную дату типа xs: date (Time), чтобы вы могли проиндексировать ее.

Если у вас есть индекс диапазона, вы можете выполнить запрос диапазона (путь) для своего элемента. Затем вы также можете использовать cts: uris для получения документов, которые необходимо удалить.

HTH!

03.02.2014
  • спасибо за ваш ответ, не уверены, могу ли я использовать этот элемент отметки времени напрямую, как вы описываете? <timestamp type="string">2014-02-03 21:16:05.348159</timestamp> 04.02.2014
  • если я сделаю let $d2 := xs:dateTime(fn:doc($uri)//j:dikwmetadata//j:timestamp), я получу XDMP-CAST: (err:FORG0001) xs:dateTime(fn:doc($uri)/descendant::j:dikwmetadata/descendant::j:timestamp) -- Invalid cast: xs:untypedAtomic("2014-02-03 21:15:35.036983") cast as xs:dateTime on line 17 expr: xs:dateTime(fn:doc($uri)/descendant::j:dikwmetadata/descendant::j:timestamp) ... так что я думаю, мне нужно сначала обработать документы, чтобы сопоставить строку временной метки? 04.02.2014
  • ах, хорошо, я узнал, что эта временная метка была создана скриптом python при вставке документа ... поэтому другая временная метка в другом элементе доступна напрямую. необходимо изменить код Python, чтобы он помещал метку времени в формате ML. Спасибо! 04.02.2014
  • @HugoKoopmans: Вам нужно только заменить пробел на 'T', и он станет преобразованным в xs: dateTime: xs:dateTime(<timestamp type="string">2014-02-03T21:16:05.348159</timestamp>) 04.02.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..