Try this pattern: xdmp:exists(cts:search(doc(), $query))
-jh- On Dec 11, 2013, at 10:18 AM, Ellis Pritchard <[email protected]> wrote: > Hi, > > I want to find if *any* document in the database matches a cts:query. > > I had assumed that cts:contains() [1] would be the appropriate function to > use, because it doesn't return any documents, and running this under the > profiler, verses an xdmp:estimate(cts:search()) equivalent [2] shows > cts:contains() to slightly faster, but just want to check that's the right > assumption, because: > > 1) xdmp:query-trace() seems to indicate that everything in my query is > searchable when using cts:contains(), but gives me a "Selected n fragments to > filter" message, which the xdmp:estimate(cts:search()) version doesn't. It > also doesn't mention that it's using the element-range-index, whereas the > cts:search() version does. > > 2) xdmp:query-meters() shows that URIs are being returned from the cluster > for cts:contains() but the xdmp:estimate() version doesn't show this. > > 3) The profiler shows a fn:collection()/ad:Audit step taking 90% of the time > for cts;contains() but has no such step for cts:search(). > > > That said, on 1.2 million documents, both are within 0.01S of each other, > with cts:contains() the faster, but can someone confirm one or the other is > best and explain why? > > Cheers! > > Ellis. > > [1] > cts:contains(/ad:Audit,cts:element-range-query(xs:QName('ad:TimeStamp'),'<',xs:dateTime('2013-12-01T00:00:00Z'))) > > 2013-12-11 15:10:29.001 Info: App-Services: at 7:15: xdmp:eval("xquery > version "1.0-ml"; declare namespace ad...", (), <options > xmlns="xdmp:eval"><database>4116264424646523266</database><modules>494024936077796...</options>) > 2013-12-11 15:10:29.001 Info: App-Services: at 7:15: Analyzing path: > fn:collection()/ad:Audit > 2013-12-11 15:10:29.001 Info: App-Services: at 7:15: Step 1 is searchable: > fn:collection() > 2013-12-11 15:10:29.001 Info: App-Services: at 7:15: Step 2 is searchable: > ad:Audit > 2013-12-11 15:10:29.001 Info: App-Services: at 7:15: Path is fully searchable. > 2013-12-11 15:10:29.001 Info: App-Services: at 7:15: Gathering constraints. > 2013-12-11 15:10:29.001 Info: App-Services: at 7:15: Step 2 contributed 1 > constraint: ad:Audit > 2013-12-11 15:10:29.001 Info: App-Services: at 7:15: Executing search. > 2013-12-11 15:10:29.003 Info: App-Services: at 7:15: Selected 1047 fragments > to filter > > > [2] > xdmp:estimate(cts:search(/ad:Audit,cts:element-range-query(xs:QName('ad:TimeStamp'),'<',xs:dateTime('2013-12-01T00:00:00Z')))) > > 2013-12-11 15:11:36.241 Info: App-Services: at 7:26: xdmp:eval("xquery > version "1.0-ml"; declare namespace ad...", (), <options > xmlns="xdmp:eval"><database>4116264424646523266</database><modules>494024936077796...</options>) > 2013-12-11 15:11:36.253 Info: App-Services: at 7:26: Analyzing path for > search: fn:collection()/ad:Audit > 2013-12-11 15:11:36.253 Info: App-Services: at 7:26: Step 1 is searchable: > fn:collection() > 2013-12-11 15:11:36.253 Info: App-Services: at 7:26: Step 2 is searchable: > ad:Audit > 2013-12-11 15:11:36.253 Info: App-Services: at 7:26: Path is fully searchable. > 2013-12-11 15:11:36.253 Info: App-Services: at 7:26: Gathering constraints. > 2013-12-11 15:11:36.253 Info: App-Services: at 7:26: Step 2 contributed 1 > constraint: ad:Audit > 2013-12-11 15:11:36.276 Info: App-Services: at 7:26: Comparison contributed > dateTime range value constraint: ad:TimeStamp < > xs:dateTime("2013-12-01T00:00:00Z") > 2013-12-11 15:11:36.276 Info: App-Services: at 7:26: Search query contributed > 1 constraint: cts:element-range-query(xs:QName("ad:TimeStamp"), "<", > xs:dateTime("2013-12-01T00:00:00Z"), (), 1) > 2013-12-11 15:11:36.276 Info: App-Services: at 7:26: Executing search. > > _______________________________________________ > General mailing list > [email protected] > http://developer.marklogic.com/mailman/listinfo/general _______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
