Actually that query does *not* require any special indexes. The server always indexes all XML element values and element-attribute values.

You would only need an attribute range index for a fast "order by" on keyword/@value, or for a cts:attribute-value-range-query term, or for cts:element-attribute-values() and its associated functions.

-- Mike

Whitby, Rob, CMG wrote:
If you put an attribute range index on keyword/@value you can do
something like this:

cts:search(
/doc/classifications/classification, cts:element-attribute-value-query(xs:Qname("keyword",
xs:Qname("value"), "something")
)

(untested!)

Rob
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Steve
Sent: 12 November 2008 14:41
To: James Clippinger
Cc: General Mark Logic Developer Discussion
Subject: Re: [MarkLogic Dev General] Improving XPath Performance
onSearchResults

I should probably add that I'm trying to extract all classification
values for the documents that have a specific keyword value.

On Wed, Nov 12, 2008 at 2:40 PM, Steve <[EMAIL PROTECTED]>
wrote:
Thanks for your response.

I've tried your suggestion and it doesn't really help. Looking at the profiling document, I can see that it's clearly the XPath on the document results that is slowing the who thing down. Is there any other ways that I can improve this. I've included a sample document (small), so you can see what I'm trying to achieve.

<doc>
 <classifications>
   <classification value="123" />
   <classification value="324" />
 </classifications>
 <keywords>
   <keyword value="word1" />
   <keyword value="word2" />

 </keywords>
</doc>



On Wed, Nov 12, 2008 at 2:24 PM, James Clippinger <[EMAIL PROTECTED]> wrote:
Steve, your query is doing some heavyweight filtering for the XPath because it is doing two steps:

1) Execute the cts:search(): generate a list of all documents matching the query in relevance order.

2) Execute the XPath: reorder the documents into document order and find only those with /doc/classifications/classification elements, returning those classification elements.

Since you are using XPath and thus returning results in document order, you probably want to use cts:contains() in an XPath predicate rather than cts:search(). cts:contains() in a rooted XPath expression will use the search indexes when appropriate, so it's as fast as the equivalent
cts:search() expression.  Try this:

let $search := cts:element-attribute-word-query(fn:QName("", "keyword"), fn:QName("", "value"), "something") return fn:collection()/doc[cts:contains(.,
$search)/classifications/classification

James

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Steve
Sent: Wednesday, November 12, 2008 8:54 AM
To: [email protected]
Subject: [MarkLogic Dev General] Improving XPath Performance on SearchResults

I've written a query which I use to search my data set and I am able

to get the results back very quickly. However the results that I get

back show the complete document that the search matched, where as I want a particular node returned.
At the moment I'm doing this:

let $search := cts:element-attribute-word-query(fn:QName("",
"keyword"), fn:QName("", "value"), "something") let $results := cts:search(fn:collection(), $search)/doc/classifications/classification
   return $results

I've tried profiling this query and I've found that there is a big lag filtering the $results of the search using XPath. Is there any way, either through using a different query or search notation, or by indexes etc that I can speed this up.

Thanks in advance...
_______________________________________________
General mailing list
[email protected]
http://xqzone.com/mailman/listinfo/general

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

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

Reply via email to