Just a guess ... but xdmp:estimate estimates fragments, not matching nodes. Having the correct nodes returned in no way has anything to do with what xdmp:estimate will return. How is your DB fragmented ? If each node is in a seperate fragment then xdmp:estimate should work (and return the same as count() ) but if you have one big XML file or if say the results span across all fragments then xdmp:estimate will return the number of fragments that have any matches, not the number of matches.
You could try just using count() instead of xdmp:estimate (but it will be slower) -David ---------------------------------------- David A. Lee Senior Principal Software Engineer Epocrates, Inc. d...@epocrates.com 812-482-5224 -----Original Message----- From: general-boun...@developer.marklogic.com [mailto:general-boun...@developer.marklogic.com] On Behalf Of McBeath, Darin W (ELS-STL) Sent: Wednesday, September 15, 2010 11:03 AM To: Mary Holstege; General Mark Logic Developer Discussion Subject: Re: [MarkLogic Dev General] How to get accurate fragment countsusing xdmp:estimate when the QName is a variable Thanks Mary. That was pretty dumb on my part. But, I still do have a question based on my more complex example. Basically, I want to get fragment counts where a fragment contains a given element, attribute, and value for that attribute. I was thinking that I could do XPath such as below wrapped in a xdmp:estimate. xdmp:estimate(//*[node-name(.)=$eQName and string(./@*[node-name(.) = $aQName]) = $value]) But, this always seems to return me the number of fragments in the DB. I did verify that //*[node-name(.)=$eQName and string(./@*[node-name(.) = $aQName]) = $value] Only returns the nodes which I want ... so, unlike last time it would appear the query is at least written correctly. Perhaps, what I'm trying to do with XPath and an accurate estimate is not currently possible. I believe that I have the necessary indexes enabled that should support an accurate estmate. I did verify that something explicit such as the following returns the correct result: xdmp:estimate(//skos:conceptsche...@rdf:about=$value]) This makes me believe that my indexes are configured correctly. I will likely drop back and try a cts:element-attribute-value-query or xdmp:eval the XPath expression (such as above) ... but, I'm curious as to whether I'm still doing something wrong above or whether this is really not possible. I also can't really create range indexes on the element/attribute as I'm trying to make this a fairly generic solution whereby one could query on any element/attribute. Thanks. Darin. -----Original Message----- From: Mary Holstege [mailto:mary.holst...@marklogic.com] Sent: Tuesday, September 14, 2010 4:22 PM To: General Mark Logic Developer Discussion; McBeath, Darin W (ELS-STL) Subject: Re: [MarkLogic Dev General] How to get accurate fragment counts using xdmp:estimate when the QName is a variable On Tue, 14 Sep 2010 13:05:58 -0700, McBeath, Darin W (ELS-STL) <d.mcbe...@elsevier.com> wrote: ... > The following query returns me the value I would expect. > > xdmp:estimate(//skos:ConceptScheme) > > However, if I have a variable $eQName which is essentially the QName for > skos:ConceptScheme > > xdmp:estimate(//$eQName) > > returns me every fragment in the DB. I think the problem is that your query isn't doing what you think it is. It equivalent to //"skos:ConceptScheme", the value of which is the string "skos:ConceptScheme" repeated for every element in the database. So the estimate is correct, but it isn't what you want. The only way to get the result you wany from the path is something like //*[fn:node-name(.)=$eQName]. //Mary _______________________________________________ General mailing list General@developer.marklogic.com http://developer.marklogic.com/mailman/listinfo/general _______________________________________________ General mailing list General@developer.marklogic.com http://developer.marklogic.com/mailman/listinfo/general