2016-09-28 7 views
2

Ist bei Verwendung der abfragebasierten flexiblen Replikation die Verwendung einer Sammlungsabfrage in der Alerting-Regel möglich? Hat jemand ein Beispiel dafür, wie man eine solche Regel erstellt, wenn es möglich ist?Kann eine Alerting-Regel eine Sammlungsabfrage enthalten?

Wir möchten Dokumente hinzufügen, die an das Replikatsystem zu einer Sammlung übertragen werden müssen, anstatt sich auf eine inhaltsbasierte Warnung wie eine Wortabfrage zu verlassen.

Antwort

0

Um eine vollständigere Antwort zu haben, hier ist, was ich gelernt habe ... es war nicht offensichtlich (zumindest für mich) aus der Dokumentation. Ich verlor mich zwischen der Verwendung der API zur Erstellung von Regeln und der Verwendung der XQuery-Bibliothek. Ich fand es am besten für meine Zwecke, sich keine Sorgen über die API zu machen. Dieses Beispiel ist speziell auf die Verwendung der Bibliothek alert beim Einrichten der abfragebasierten flexiblen Replikation ausgerichtet.

  1. -Setup für die Domäne CPF Alarmierung:

    xquery version "1.0-ml"; 
    import module namespace flexrep = "http://marklogic.com/xdmp/flexible-replication" 
        at "/MarkLogic/flexrep.xqy"; 
    
    import module namespace alert = "http://marklogic.com/xdmp/alert" 
        at "/MarkLogic/alert.xqy"; 
    (: Run against the content database :) 
    
    let $domain-id := 12956765056276017188 (: There are functions to help get this programmatically :) 
    let $alerting-uri := flexrep:domain-alerting-uri($domain-id) 
    let $existing := alert:config-get($alerting-uri) 
    return 
        if ($existing) 
        then $alerting-uri 
        else 
         (alert:config-insert(
          alert:make-config(
          $alerting-uri, 
          "qbfr", 
          "alerting rules for QBFR", 
          <alert:options/> 
          ) 
         ), fn:concat("Alerting configuration created- ",$alerting-uri)) 
    
  2. Erstellen Sie eine Log-Aktion in der Alarmierung Config

    xquery version "1.0-ml"; 
    import module namespace alert = "http://marklogic.com/xdmp/alert" 
        at "/MarkLogic/alert.xqy"; 
    (: Run against the content database :) 
    
    let $alerting-uri := 
        "http://marklogic.com/xdmp/flexrep/12956765056276017188/alerting" 
    return 
        alert:action-insert($alerting-uri, alert:make-log-action()) 
    
  3. Legen Sie die Regel für die beabsichtigten Benutzer

    xquery version "1.0-ml"; 
    import module namespace alert = "http://marklogic.com/xdmp/alert" 
        at "/MarkLogic/alert.xqy"; 
    
    let $alerting-uri := "http://marklogic.com/xdmp/flexrep/12956765056276017188/alerting" 
    let $rule-name := "StackFlow-Collection-Alert-Rule" 
    let $description := "Will alert on documents in the StackFlow collection" 
    let $user-id := xdmp:user("my-username") 
    (: The cts query in the rule can use any of the cts constructs! :) 
    let $rule := 
        alert:make-rule(
         $rule-name, 
         $description, 
         $user-id, 
         cts:collection-query("StackFlow"), 
         "log", 
         <alert:options /> 
        ) 
    return 
        alert:rule-insert($alerting-uri, $rule) 
    

Ich füge ein Thema dazu in der Dokumentation ein und werde versuchen, weitere Beispiele und ähnliches zu veröffentlichen. Vorerst muss ich mit dem Projekt fortfahren. Hoffe, das hilft jemandem auf der Straße.

1

Ja, das sollte gut funktionieren. Ich habe kein praktisches Beispiel.

+0

Danke, ich werde weiter damit spielen, eine Regel dafür zu machen ... –

Verwandte Themen