The quick answer is something like:
if ($oc) then () else cts:element-value-query(xs:QName(nv:objectClass), $oc)
When $oc is empty, there is no need to include that query term at all. So it
can be empty too.
However, the long answer is that converting an XPath expression to cts:query
won't necessarily improve performance. If you don't need composability or
relevance ranking, you might as well stick with XPath.
But trying to express an XPath as a cts:query can be a useful exercise, because
anything that won't map easily is likely to be expensive and anything that can
be expressed in cts:query is likely to be efficient. It is tricky to say
exactly what is going on without profiler output, but I imagine that the
expensive bits of your XPath are probably the nested steps. For example:
$oc = nv:lookupInfo/nv:objectClass
nvdiff:diff/nv:content/nv:crnData8[nv:policies or nv:members]
Wherever possible you want to rearrange the XPath steps so that they are
searchable and flat. Here's a slightly more efficient version:
xdmp:directory("/db/netvisn/audit_history/", "infinity")/
nv:auditHistory[not($oc) or $oc = nv:lookupInfo/nv:objectClass]/
nv:audit[
$effect ne "spec" or nv:sync/nv:archived]
[$effect ne "security" or
nvdiff:diff/nv:content/nv:crnData8/(nv:policies | nv:members)]
-- Mike
On 16 Apr 2012, at 08:21 , Gary Larsen wrote:
> Hi
>
> I’m trying to convert a query to use cts for performance. Is there a cts
> constructor that I can use the check a variable?
>
> Here’s a portion of the query:
>
> xdmp:directory('/db/netvisn/audit_history/','infinity')
> /nv:auditHistory
> [fn:not(fn:exists($oc)) or $oc =
> nv:lookupInfo/nv:objectClass]
> /nv:audit
> [$effect ne 'spec' or nv:sync/nv:archived]
> [$effect ne 'security'
> ornvdiff:diff/nv:content/nv:crnData8[nv:policies or nv:members]]
>
>
> For example I would like to turn this portion into a cts:or-query
>
>
> $effect ne 'spec' or nv:sync/nv:archived
>
> For second part I can use a cts:element-value-query(). I need something for
> the first part.
>
> Or maybe I’m looking at this all wrong. Thanks for any suggestions.
>
> Gary
>
> _______________________________________________
> General mailing list
> [email protected]
> http://developer.marklogic.com/mailman/listinfo/general
_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general