I've found by practice (not sure if its documented) that
element-word-query matches all decendant text nodes not just direct
descendants.   Very annoying for just this use case (but very useful for
other use cases).
Would love an option like for directory() where you can specify to
decend or not ...



-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Runstein,
Robert E. (Contr) (IS)
Sent: Thursday, February 25, 2010 3:30 PM
To: General Mark Logic Developer Discussion
Subject: [MarkLogic Dev General] Element specific search with like
namedtext nodes

Hi All,

Given the following two documents:
<doc>
 <a>
  <name>Bob</name> 
 <b>
  <name>Jim</name> 
  </b>
 </a>
</doc>

<doc>
 <a>
  <name>Jim</name> 
 <b>
  <name>Bob</name> 
  </b>
 </a>
</doc>>

The following returns just the first document: fn:doc()[./doc/a/name =
"Bob"]

I'd like to be able to get the same result using cts:query.
Specifying the exact elements to search using the cts:element-query and
cts:element-word-query as below, matches both documents when I would
like only the first to match.

let $q :=
<q><cts:element-query>
<cts:element>doc</cts:element>
<cts:element-query>
<cts:element>a</cts:element>
<cts:element-word-query>
<cts:element>name</cts:element>
<cts:text xml:lang="en">Bob</cts:text>
</cts:element-word-query>
</cts:element-query>
</cts:element-query></q>

return search:resolve($q/element())

==>

<search:response total="2" start="1" page-length="10"
xmlns:search="http://marklogic.com/appservices/search";>
 <search:result index="1" uri="/bobtest" path="fn:doc("/bobtest")"
score="56" confidence="0.491559" fitness="0.651473">
 <search:snippet>
 <search:match path="fn:doc("/bobtest")/doc/a/name">
  <search:highlight>Bob</search:highlight> 
  </search:match>
  </search:snippet>
  </search:result>
 <search:result index="2" uri="/bobtest2" path="fn:doc("/bobtest2")"
score="56" confidence="0.491559" fitness="0.651473">
 <search:snippet>
 <search:match path="fn:doc("/bobtest2")/doc/a/b/name">
  <search:highlight>Bob</search:highlight> 
  </search:match>
  </search:snippet>
  </search:result>
 <search:metrics>
  <search:query-resolution-time>PT0.094S</search:query-resolution-time> 
  <search:facet-resolution-time>PT0S</search:facet-resolution-time> 
  <search:snippet-resolution-time>PT0S</search:snippet-resolution-time> 
  <search:total-time>PT0.094S</search:total-time> 
  </search:metrics>
  </search:response>

The API docs for cts:element-word-query state:
"Returns a query matching elements by name with text content containing
a given phrase. Searches only through immediate text node children of
the specified element as well as any text node children of child
elements defined in the Admin Interface as element-word-query-throughs
or phrase-throughs; does not search through any other children of the
specified element."

No query or phrase throughs have been configured.  Is my query incorrect
for what I'm trying to accomplish? Thanks.

Bob
_______________________________________________
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