2017-07-23 3 views
1

hatte ich geschrieben zunächst die Abfrage:Marklogic: Mit xdmp: Schätzung und Kodierungsstandards

cts:search(fn:doc(),cts:element-range-query(xs:QName("ts:week"), ">=", xs:date("2009-05-01")),"unfiltered") 

ich es auf die folgende geändert, da es mehr Ästhetik schien:

let $range_query := cts:element-range-query(xs:QName("ts:week"), ">=", xs:date("2009-05-01")) 
let $query := cts:search(fn:doc(), $range_query, "unfiltered") 
return $query 

ich das gleiche bekam Ergebnisse wie erwartet.

Nun, nur um meine "ungefilterte" Herangehensweise zu bestätigen, habe ich die Überprüfung von fn: count vs xdmp: estimate durchgeführt.

xdmp:estimate(cts:search(fn:doc(),cts:element-range-query(xs:QName("ts:week"), ">=", xs:date("2009-05-01"))) 

Die obige Abfrage lief gut und gab das erwartete Ergebnis zurück.

Aber

let $range_query := cts:element-range-query(xs:QName("ts:week"), ">=", xs:date("2009-05-01")) 
let $query := cts:search(fn:doc(), $range_query) 
return xdmp:estimate($query) 

Gab mir einen Fehler: Ausdruck unergründlich ist.

1) Benutzt mein Ansatz die empfohlene Methode zum Schreiben von Code in MarkLogic?

2) Was macht den Ausdruck mit dem Let and Return-Ansatz unerforschbar?

Antwort

3

Die Funktion xdmp:estimate nimmt einen Ausdruck zur Auswertung. Sie können eine Variable nicht übergeben. Die $query in Ihrem Fall in der dritten Zeile hält eine Sequenz von Ergebnissen, und Sie können eine Sequenz nicht schätzen.

In der Tat sollte Ihre $query wirklich $results genannt werden, weil es keine Abfrage hält, hält es die ausgeführten Ergebnisse der Suche.

Denken Sie an xdmp:estimate mit den Worten: "Hey, wenn ich diesen Ausdruck ausgeführt habe, wie viele Ergebnisse glauben die Indizes zu bekommen?"

+1

Ich lege den Suchausdruck in xdmp: Schätzung, es funktioniert gut. Vielen Dank. – Yash