Good suggestion..
About “BTW, I tried the solution mentioned by Geert, to define the user as fragment root, but it did not work.”, it might be necessary to add /userdetails/user as searchable path. Queries do not cross fragment boundaries, so I guess the query was running against the fragment containing only the root element. Kind regards, Geert PS: using fragments, or chopping your document usually improves results from xdmp:estimate. That was another reason why I recommended it.. *Van:* [email protected] [mailto: [email protected]] *Namens *John Zhong *Verzonden:* vrijdag 23 maart 2012 17:49 *Aan:* MarkLogic Developer Discussion *Onderwerp:* Re: [MarkLogic Dev General] Problem in making use of cts:not-query() You can change your cts:not-query(cts:element-value-query(xs:QName("subject"), "C")) to cts:element-range-query(xs:QName("subject"), "!=","C"), which needs the "Element Range Indexes" on subject element. So, cts:element-query( xs:QName("user"), cts:and-query(( cts:element-value-query(xs:QName("id"), "222"), cts:element-attribute-value-query(xs:QName("user"), xs:QName("branch"), "CSE"), cts:element-range-query(xs:QName("subject"), "!=","C") )) ) It worked for me on ML 4.2 version. The cts:not-query does not work, in my opinion, it is because: In your sample XML: /userdetails//subject = "C" > true not(/userdetails//subject = "C") > false So, I think the cts:not-query works similarly... BTW, I tried the solution mentioned by Geert, to define the user as fragment root, but it did not work. John On Fri, Mar 23, 2012 at 4:48 AM, Sudheer Yalaverthi < [email protected]> wrote: Hi Team, My sample XML would be like this. <userdetails> <user branch="CSE"> <id>111</id> <subjectList> <subject>C</subject> <subject>C++</subject> <subject>Oracle</subject> </subjectList> </user> <user branch="CSE"> <id>222</id> <subjectList> <subject>C++</subject> <subject>Oracle</subject> </subjectList> </user> <user branch="IT"> <id>333</id> <subjectList> <subject>C</subject> <subject>C++</subject> <subject>Oracle</subject> </subjectList> </user> </userdetails> I have a requirement where i should pick this Xml from the DB if there is a user entry with branch as"CSE" and id =222 and it should not have "C" as subject. If i write a additional query something like below for search:search() cts:element-query( xs:QName("user"), cts:and-query(( cts:element-value-query(xs:QName("id"), "222"), cts:element-attribute-value-query(xs:QName("user"), xs:QName("branch"), "CSE"), cts:not-query(cts:element-value-query(xs:QName("subject"), "C")) )) ) This is not turning me up the results. The only one scenario this query is gonna return back the result is if none of the users in the DB has the subject as "C". but this is not i am expecting. I know there is one user element which satisfies all the conditions and other user elements which fail these connditions. I want to retrieve the Xml even if one of the user element passes all these conditions irrespective of other elements pass or fail. Please suggest me. I am using search:search and i can not avoid this as i have some other requirements to sorting the result Xmls. Thanks, Sudheer _______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
_______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
