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