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