Database lookups happen on a limited set of function calls: doc(), 
collection(), xdmp:directory(), cts:search(), xdmp:document-properties(), and 
maybe a few that I've missed. Database lookups also happen for absolute XPath 
expressions, because /a/b/c is implicitly treated as collection()/a/b/c. But 
$foo/bar/baz happens in memory, wherever $foo came from.

-- Mike

On 11 Sep 2013, at 02:44 , Rachel Wilson <[email protected]> wrote:

> Ah okay, thanks.
> 
> That also explains other unsearchables that we were seeing after passing
> variables to functions.
> 
> So does ML go back to disk in those xpath cases that are unrooted in the
> database, or does it read from memory?  While I take your more useful
> point about optimising the slow stuff, this is more a question for
> understanding
> 
> Rachel
> 
> 
> -----Original Message-----
> From: Michael Blakeley <[email protected]>
> Reply-To: MarkLogic Developer Discussion <[email protected]>
> Date: Tuesday, 10 September 2013 17:51
> To: MarkLogic Developer Discussion <[email protected]>
> Subject: Re: [MarkLogic Dev General] Unsearchable text()
> 
> It isn't the text(), it's the FLWOR.
> 
> Searchable expressions are XPath expressions that are rooted in the
> database. An expression like $foo/bar is never searchable, because the
> XPath is relative to a variable rather than rooted in the database. So the
> expression to assign $documentProperties is searchable, but $modifiedBy is
> not. And that's ok.
> 
> Now, you could rewrite this to be fully searchable - but I wouldn't.
> 
>    xdmp:document-properties($uri)/prop:properties/prop:modifiedBy
> 
> That search will check for prop:properties and prop:modifiedBy as well as
> the URI. But this is a doc() lookup, so the URI is the most useful part.
> Every property fragment will have prop:properties, and presumably in your
> application prop:modifiedBy will be ubiquitous.
> 
> Making all your expressions searchable is not a worthwhile goal, and
> usually impossible anyway. Optimize the slow stuff.
> 
> If this code needs optimization at all, I would try to merge the repeated
> calls to doc(). That might be difficult to arrange, but a tight loop of
> doc() calls can be expensive. Something like doc($uris) is cheaper: 1
> database lookup instead of N. But that assumes you can get the same
> results without doing too many backflips.
> 
> -- Mike
> 
> On 10 Sep 2013, at 04:30 , Rachel Wilson <[email protected]> wrote:
> 
>> In the ErrorLog output we see  "Step 4 is unsearchable: text()"  for any
>> property we retrieve with "text()" as follows:
>> 
>> Eg.
>> 
>> for $documentUri in $uris
>>    let $documentProperties := xdmp:document-properties($documentUri)
>>    let $modifiedBy :=
>> $documentProperties/prop:properties/prop:modifiedBy/text()
>> 
> 
> _______________________________________________
> General mailing list
> [email protected]
> http://developer.marklogic.com/mailman/listinfo/general
> 
> 
> 
> -----------------------------
> http://www.bbc.co.uk
> This e-mail (and any attachments) is confidential and
> may contain personal views which are not the views of the BBC unless 
> specifically stated.
> If you have received it in
> error, please delete it from your system.
> Do not use, copy or disclose the
> information in any way nor act in reliance on it and notify the sender
> immediately.
> Please note that the BBC monitors e-mails
> sent or received.
> Further communication will signify your consent to
> this.
> -----------------------------
> _______________________________________________
> General mailing list
> [email protected]
> http://developer.marklogic.com/mailman/listinfo/general
> 

_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to