Hi Erik, Thanks for your response. Your answer was very useful. I tried word constraint on "Author" element, but was not working as expected until I created a Phrase Through for "Author" element. Do you mean we have to create Phrase Through in order to achieve this using a word constraint?
Thanks, Blessing. On Fri, Sep 27, 2013 at 9:22 PM, Erik Hennum <[email protected]> wrote: > Hi, Blessing: > > A couple of issues: > > * Term options are only valid for term, word, and value queries. If you > add <debug>true</debug> to the options, you'll see that the Search API is > dropping the term options. > > * I think you probably want a word constraint on an element rather than an > element query. An element query specifies an element container for nested > queries scoped to that element. > > With a suitable database configuration, the following worked for me: > > let $QUERY-OPTIONS := (<search:term-option>wildcarded</search:term-option>, > > > <search:term-option>case-insensitive</search:term-option>, > > <search:term-option>diacritic-insensitive</search:term-option>, > <search:term-option>unstemmed</search:term-option> > ) > let $OPTIONS := <options xmlns="http://marklogic.com/appservices/search"> > <constraint name="Author"> > <word> > <element ns="" name="Author"/> > {$QUERY-OPTIONS} > </word> > </constraint> > <page-length>1000</page-length> > <debug>true</debug> > > </options> > let $query := "Author:Peter*" > return search:search($query,$OPTIONS) > > > Hoping that's useful, > > > Erik Hennum > > ________________________________ > From: [email protected] > [[email protected]] on behalf of Blessing N > [[email protected]] > Sent: Friday, September 27, 2013 12:56 AM > To: [email protected] > Subject: [MarkLogic Dev General] Issue with Wildcard search in > cts:element-query > > Hi, > > I have records as follows > > <record> > <Author> > <Name>Peter</Name> > <City>NewYork</City> > </Author> > <Editor> > <Name>Steven</Name> > <City>Virginia</City> > </Editor> > </record> > > <record> > <Author> > <Name>Smith</Name> > <City>Phoenix</City> > </Author> > <Editor> > <Name>Peter Jackson</Name> > <City>Washington</City> > </Editor> > </record> > > My requirement is to find Author/Name starting with "Peter*" which should > return only the first record. However the following code returns both the > record where "Peter*" is present in Editor/Name > > > declare variable $mynamespace := "http://some.com/mynamespace"; > declare variable $QUERY-OPTIONS := > (<search:term-option>wildcarded</search:term-option>, > > <search:term-option>case-insensitive</search:term-option>, > > <search:term-option>diacritic-insensitive</search:term-option>, > > <search:term-option>unstemmed</search:term-option> > ); > > declare variable $OPTIONS := <options > xmlns="http://marklogic.com/appservices/search"> > <constraint name="Author"> > <element-query ns="{$mynamespace}" > name="Author" /> > {$QUERY-OPTIONS} > </constraint>, > <page-length>1000</page-length>, > > > </options>; > let $query := "Author:Peter*" > let $results := search:search($query,$OPTIONS) > return $results > > This is the query formed > > <search:report id="SEARCH-FLWOR">(cts:search(fn:collection(), > cts:element-query(xs:QName("mynamespace:Author"), cts:word-query("Peter*", > ("lang=en"), 1), ()), ("score-logtfidf"), 1))[1 to 1000]</search:report> > > I found this issue only with Wildcard search in cts:element-query whereas > "Author:Peter" works perfectly. Is this a known issue or do i have to modify > my implementation. > > Thanks > > > > > > > _______________________________________________ > General mailing list > [email protected] > http://developer.marklogic.com/mailman/listinfo/general > _______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
