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
