Dave,

One problem is that your expected output isn't a valid cts:query.

cts:element-word-query(QName("AUTHOR"),
   cts:and-query(cts:word-query("john"), cts:word-query("smith")))
=>
[1.0-ml] XDMP-TOOFEWARGS: (err:XPST0017) QName("AUTHOR") -- Too few args, expected 2 but got 1

It's relatively easy to fix two typos in the above, but this still throws XDMP-ARGTYPE, because cts:element-word-query() does not support what you're trying to do:

cts:element-word-query(xs:QName("AUTHOR"),
  cts:and-query((cts:word-query("john"), cts:word-query("smith"))))

Take a look at the function signature at http://developer.marklogic.com/pubs/4.0/apidocs/cts-query.html#cts:element-word-query

cts:element-word-query(
        $element-name as xs:QName*,
        $text as xs:string*,
        [$options as xs:string*],
        [$weight as xs:double]
)  as  cts:element-word-query
[ snip ]
$text : Some words or phrases to match. When multiple strings are
specified, the query matches if any string matches.

Since you want AND, rather than OR, cts:element-query() is necessary after all.

cts:element-query(xs:QName("AUTHOR"),
  cts:and-query((cts:word-query("john"), cts:word-query("smith"))))

That query would match your use-case, but lib-parser doesn't implement a syntax that would generate it query for you. You could extend lib-parser to support the syntax you have in mind. If you do, please share your patch.

-- Mike

On 2008-12-11 09:47, Dave Feldmeier wrote:

"(AUTHOR:john AUTHOR:smith)" is doing what I expect, but I need a different
query in addition to this one. Let me give you some context. Suppose that we
have two documents:

     <DOCUMENT>
     <AUTHOR>smith, john</AUTHOR>
     </DOCUMENT

     <DOCUMENT>
     <AUTHOR>jones, john</AUTHOR>
     <AUTHOR>smith, steve</AUTHOR>
     </DOCUMENT

The problem with the query above is that it will match both documents, but I
want a query that matches only the first document. In other words, I want the
AND to be performed within any single AUTHOR field.

The obvious syntax for this is: "AUTHOR:(john smith)". However, lib-parse
appears to parse this as if the query were as follows: 'AUTHOR:"" (john smith)'
- in other words, it's looking for an AUTHOR field with "" (and there is none),
so the entire query returns zero results.

What I expected it to do is something like:

     (cts:element-word-query(QName("AUTHOR"),
     cts:and-query(cts:word-query("john"), cts:word-query("smith"))))
_______________________________________________
General mailing list
[email protected]
http://xqzone.com/mailman/listinfo/general

Reply via email to