I feel sure it should be, and I’m just failing to make proper use of the system, but I’d appreciate more eyes on this.
Consider the following set of (contrived, simple) documents: Doc 1: <test uuid="X" > <relationships> <relationship id="one" /> <relationship id="two" inherited="true" /> </relationships> </test> Doc 2: <test uuid="Y"> <relationships> <relationship id="one" inherited="false" /> <relationship id="three" /> </relationships> </test> Doc 3: <test uuid="Z"> <relationships> <relationship id="one" inherited="true" /> <relationship id="four" /> </relationships> </test> I want to be able to return all those documents which contain at least one relationship with id equal to “one” and inherited not equal to “true” (i.e. false or not present). So in the above example I’d expect to be returned docs 1 and 2. In the real world I’ll be searching across over 100 million documents, so I need to be able to do this via indexes and xquery not looping over all available documents and examining their content. With a cts:and-not-query looking for the presence of id as “one” and not having inherited as “true” I only get returned doc2. As I understand it, this is because the and-not-query is matching inherited equal to “true” in the second relationship of doc1 and discarding the entire doc, even though that relationship is not for the desired id. Is there any kind of query (with any necessary indexes) I can construct that will do what I want and only pay attention to the inherited field when it is within the same relationship element as id? An alternative we have considered is to create 2 different element types within the relationships parent, so that we have relationship, and relationship_direct (or whatever), and the query that doesn’t want to count inherited relationships looks only at relationship_direct elements, but that seems like a hacky method of doing this. We’ve also considered separate documents, but because of all the other data held within them and not shown in this basic example that would be a massive headache. If it would help, we could ensure the inherited attribute was always present, and set to true or false as necessary, rather than normally being either true or not present. How would other people go about doing this? Any ideas would be great. In case it matters, and there’s some new MarkLogic 8 function that does this, we’re currently on MarkLogic 7 in our live environment. We will be upgrading eventually, but not soon enough for us to be able to wait for that before we make this query work. Thanks Dan ---------------------------- http://www.bbc.co.uk This e-mail (and any attachments) is confidential and may contain personal views which are not the views of the BBC unless specifically stated. If you have received it in error, please delete it from your system. Do not use, copy or disclose the information in any way nor act in reliance on it and notify the sender immediately. Please note that the BBC monitors e-mails sent or received. Further communication will signify your consent to this. ---------------------
_______________________________________________ General mailing list [email protected] Manage your subscription at: http://developer.marklogic.com/mailman/listinfo/general
