Jakob, The setting "include document root" on the word query spec toggles whether everything is included or excluded by default. Set this to true if you want to define some exclusions and have the rest automatically included, and set it to false if you want the inverse. Also note that inclusions/exclusions propagate to descendants.
-Will -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Jakob Fix Sent: Saturday, March 17, 2012 2:29 PM To: MarkLogic Developer Discussion Subject: Re: [MarkLogic Dev General] how to restrict a search:search query to only search within certain elements When including a number of elements via the Word Query specification of the database, will this automatically *exclude* all elements *not* mentioned, or do I have to exclude them one by one? It doesn't seem so as the elements <a:b>, <a:c>, <a:d> are included, but nevertheless <a:e> also appears in the results. Thanks for confirmation. On Sat, Mar 17, 2012 at 18:39, Colleen Whitney <[email protected]> wrote: > Yes, you will, it just affects word query. > > Sent from my iPhone > > On Mar 17, 2012, at 10:12 AM, "Jakob Fix" <[email protected]> wrote: > >> Thanks Colleen, once I knew the magic phrase that is "word query >> specification" I also found an illustrative blog post by David >> Cassell: http://blog.davidcassel.net/2011/10/word-query-specification/ >> >> I hope that I'll still be able to create facets on other parts of the >> document. >> >> thanks! >> Jakob. >> >> >> >> On Sat, Mar 17, 2012 at 16:04, Colleen Whitney >> <[email protected]> wrote: >>> Jakob, if you want to restrict all unconstrained terms to a particular part >>> of your content, you can configure a Word Query specification on you >>> database. It's just like configuring a field, but controls how all word >>> queries are evaluated. >>> >>> Sent from my iPhone >>> >>> On Mar 17, 2012, at 7:32 AM, "Jakob Fix" <[email protected]> wrote: >>> >>>> I'd like to know whether the (working) solution below is the way to go >>>> or whether there are better ways. >>>> >>>> Here it goes: I'd like to restrain a simple word search to a number of >>>> elements, like so: >>>> >>>> cts:search(/*, >>>> cts:and-query(( >>>> cts:element-word-query( >>>> (xs:QName("abstract"), >>>> xs:QName("title"), >>>> xs:QName("subTitle") >>>> ), >>>> "query" >>>> ) >>>> )) >>>> ) >>>> >>>> but I'd like to also use the search:search API in order to profit from >>>> the snippeting, paging and reporting features it provides. >>>> >>>> I've looked at the <additional-query> option and indeed it works when >>>> including the above cts:and-query, but I'm not sure whether that is >>>> the optimal way of restraining search:search to a number of elements, >>>> in particular the fact that I have to repeat the search term ($term) >>>> seems kind of suboptimal: >>>> >>>> let $term := "cambodia" >>>> >>>> let $additional-query := cts:and-query(( >>>> cts:element-word-query( >>>> (fn:QName("http://purl.org/dc/terms/", "abstract"), >>>> fn:QName("http://purl.org/dc/terms/", "title"), >>>> fn:QName("http://purl.org/dc/terms/", "subtitle") >>>> ), >>>> $term >>>> ) >>>> )) >>>> >>>> let $options := >>>> <options xmlns="http://marklogic.com/appservices/search"> >>>> <additional-query>{$additional-query}</additional-query> >>>> <return-facets>false</return-facets> >>>> <debug>true</debug> >>>> </options> >>>> >>>> return search:search($term, $options) >>>> >>>> >>>> I had looked also at using <element-query> constraints to constrain >>>> the search to these elements only, but the <constraint> options seem >>>> to provide a facility to further constrain the search via their name, >>>> but I'm looking to only ever search in the three elements. >>>> >>>> <constraint name="title"> >>>> <element-query ns="http://purl.org/dc/terms/" name="title"/> >>>> </constraint> >>>> <constraint name="abstract"> >>>> <element-query ns="http://purl.org/dc/terms/" name="abstract"/> >>>> </constraint> >>>> <constraint name="subtitle"> >>>> <element-query ns="http://purl.org/dc/terms/" name="subtitle"/> >>>> </constraint> >>>> >>>> Defining these constraints would allow me to do >>>> search:search("title:cambodia subtitle:cambodia abstract:cambodia", >>>> $options) but my overall goal is to only search a number of predefined >>>> elements for any search. And repeating the constraints and the terms >>>> in the search seems clumsy. >>>> >>>> I didn't have more luck with the <word> constraint option, for the >>>> same reason as the <element-query> option. >>>> >>>> <constraint name="title"> >>>> <word> >>>> <element ns="http://purl.org/dc/terms/" name="title"/> >>>> </word> >>>> </constraint> >>>> <constraint name="abstract"> >>>> <word> >>>> <element ns="http://purl.org/dc/terms/" name="abstract"/> >>>> </word> >>>> </constraint> >>>> >>>> So is the <additional-query> approach the way to go? >>>> >>>> Thanks, >>>> Jakob. >>>> _______________________________________________ >>>> General mailing list >>>> [email protected] >>>> http://developer.marklogic.com/mailman/listinfo/general >>> _______________________________________________ >>> General mailing list >>> [email protected] >>> http://developer.marklogic.com/mailman/listinfo/general >> _______________________________________________ >> General mailing list >> [email protected] >> http://developer.marklogic.com/mailman/listinfo/general > _______________________________________________ > General mailing list > [email protected] > http://developer.marklogic.com/mailman/listinfo/general _______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general _______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
