Sorry, I used bad terminology. I said root element when I should have said the element returned by cts:search. In our example, the searchable expression that we set is "//div" so I believe that is what is being used to construct a cts:search that looks like "cts:search(//div, ...)" so the cts:search is actually returning the div element that matches the search. That div happens to also be the element that has the order attribute on it and I believe the order by is constructed so that it does "order by $result//div/@order" when we really want "order by $result/descendant-or-self::div/@order". Since the div elements we are looking for aren't root elements we don't have the option to jump up to the document level with something like "fn:collection()".
I'm thinking, for now, our best option would probably be to use search:parse to build the cts:queries to pass into cts:search and do our own ordering logic. Thanks, Ryan Dew On Thu, May 2, 2013 at 10:20 AM, Colleen Whitney < colleen.whit...@marklogic.com> wrote: > The other issue that commonly causes sorting to look confusing is when > you have multiple instances of an element in the same document. Is there > any possibility that this is the case with your data? > ------------------------------ > *From:* general-boun...@developer.marklogic.com [ > general-boun...@developer.marklogic.com] on behalf of Erik Hennum [ > erik.hen...@marklogic.com] > *Sent:* Thursday, May 02, 2013 6:49 AM > *To:* MarkLogic Developer Discussion > *Subject:* Re: [MarkLogic Dev General] search:search and ordering by > attribute on root element > > Hi, Ryan: > > cts:search() returns documents, so // will match the root element. > > In my simple test, search:search() did sort on an attribute on the root > element. > > A few simple things to check -- is the div element in the XHTML > namespace? Is there a range index on the attribute in the same collation > as the query? > > > Erik Hennum > > ------------------------------ > *From:* general-boun...@developer.marklogic.com [ > general-boun...@developer.marklogic.com] on behalf of Ryan Dew [ > ryan.j....@gmail.com] > *Sent:* Wednesday, May 01, 2013 3:02 PM > *To:* MarkLogic Developer Discussion > *Subject:* [MarkLogic Dev General] search:search and ordering by > attribute on root element > > Hello everyone, > > We have scenario where we are trying to sort on an attribute on the root > element being returned. The simple use case is shown below. The div > elements that we are returning have an order attribute. > > let $options := > <options xmlns="http://marklogic.com/appservices/search"> > <searchable-expression>//div</searchable-expression> > <transform-results apply="raw"/> > <sort-order type="xs:string" direction="ascending"> > <element ns="" name="div"/> > <attribute ns="" name="order"/> > <annotation>chronology</annotation> > </sort-order> > </options> > > return search:search("faith",$options,1,10) > > We don't get the results we would expect. After looking at the > search:search code it appears that the root element isn't included in the > XPath expression generated for the order by. It generates > "$result//div/@order", but I would expect something like: > "$result/descendant-or-self::div/@order". (Sorry if I'm digging more than I > should.) Has anyone else encountered this problem and worked around it? > > Thanks, > Ryan Dew > > _______________________________________________ > 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