Hi Mike,

cts:element-attribute-word query and cts:field query are leaf-level
constructors, just like cts:word-query.  You can use the composable
constructors like cts:and-query to combine these leaf-level
constructors.  So I believe you can achieve what you need by using
something like this:

cts:and-query((
  cts:element-attribute-word-query(xs:QName("elementname"), 
       xs:QName("attrributeName"), "word1"),
  cts:element-attribute-word-query(xs:QName("elementname"), 
       xs:QName("attrributeName"), "word2")
 ))

Depending on your content and on what you are searching over, you might
find some cases where this returns nodes where both matches are not in
the same attribute(for example, if there is one attribute with only
"word1" and one with only "word2" under the path you are searching). You
should be able to deal with that by wrapping the cts:and-query in a
cts:element-query.  For example:

cts:element-query( xs:QName("elementname"),
  cts:and-query((
    cts:element-attribute-word-query(xs:QName("elementname"), 
       xs:QName("attrributeName"), "word1"),
    cts:element-attribute-word-query(xs:QName("elementname"), 
       xs:QName("attrributeName"), "word2")
 )) )

You can compose this queries in arbitrarily complex ways to solve most
of these situations.  Does this approach do what you need?

-Danny



-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Mike
Sokolov
Sent: Thursday, September 13, 2007 7:00 AM
To: General Mark Logic Developer Discussion
Subject: [MarkLogic Dev General] querying multiple words w/AND semantics


(sorry if this came through multiple times - I had some trouble sending 
from a different address)

It seems to me there's an odd asymmetry in the cts:query constructors.

You can write a query that finds documents containing some element that
matches all of a set of words (for example, where the title contains all

the
words in a query) using
cts:element-query(cts:and-query(($words))

but there is no analogous behavior for attributes or fields (eg no
cts:field-query or cts:attribute-query taking a query as an argument).

You can specify multiple words as arguments to field-query and
attribute-word-query (and element-word-query), but these all have OR
semantics, and in my case I'm interested in AND.

Does this reflect some deeper structure in Mark Logic or is it just a 
gap in
the API?
_______________________________________________
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