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

Reply via email to