[MarkLogic Dev General] Limiting cts-search to fields

Engard, Nicole nicole.engard at ptsem.edu
Fri Oct 12 06:33:37 PDT 2007


Thanks Danny,

 

I did try your first option, but I'm going to give number 2 a shot and
see what happens! 

 

Thanks

Nicole

 

________________________________

From: general-bounces at developer.marklogic.com
[mailto:general-bounces at developer.marklogic.com] On Behalf Of Danny
Sokolsky
Sent: Friday, October 05, 2007 10:44 PM
To: General Mark Logic Developer Discussion
Subject: RE: [MarkLogic Dev General] Limiting cts-search to fields

 

Hi Nicole,

 

I can think of two ways you might accomplish this.

 

1) You can make the first parameter of your cts:search only cover the
things you want to search with an or.  Something like:

 

//METS:dmdSec/METS:mdWrap/METS:xmlData/(dc:title | dc:creator | dc:date
| dc:type | etc | etc)

 

making sure to leave the element you want to exclude off the list.  The
problem here is that it would return the inside elements that match the
search, and you wanted the METS:dmdSec element.  You can achieve that by
sticking an XPath on the end of your search, something like this:

 

declare namespace METS="foo"
declare namespace dc="bar"

 

let $query := cts:word-query("Article")
return
cts:search(doc("test.xml")//METS:dmdSec/METS:mdWrap/METS:xmlData/(dc:tit
le | dc:creator | dc:date | dc:type), $query)/ancestor::METS:dmdSec

 

It seems like you might get some duplicates with this method, too (for
example, if you had a match in both a title and creator elements having
the same METS:dmdSec ancestor), and you would have to deal with that.

 

2) Alternately, you can use the 3.2 Fields feature and create a field
that excludes the dc:source element.  Then your cts:query would use
cts:field-word-query instead of what your mlps:get-cts-query generates
(presumably you would need to modify that function to generate the
cts:field-word-query constructor).

 

There may be other ways, but I can't think of them right now.

 

-Danny

	-----Original Message-----
	From: general-bounces at developer.marklogic.com
[mailto:general-bounces at developer.marklogic.com] On Behalf Of Engard,
Nicole
	Sent: Tuesday, October 02, 2007 9:42 AM
	To: general at developer.marklogic.com
	Subject: [MarkLogic Dev General] Limiting cts-search to fields

	I'm looking to limit what fields our search looks at when
pulling results.

	 

	We have this function:

	 

	define function quick-search ($params as node()) as node()* {
	
	let $query := mlps:get-cts-query(fn:data($params/terms))
	let $raw-results := cts:search(//METS:dmdSec,$query)
	let $results := build-results($params, $raw-results, $query)
	return
	  (
	  if ($results/result) then
	    (v:display-results($params, $results))
	  else
	    v:display-no-results($params)
	  )
	
	} 

	 

	And here is a snippet of the XML

	 

	<METS:dmdSec ID="dmd002">
	        <METS:mdWrap MIMETYPE="text/xml" MDTYPE="DC"
LABEL="Dublin Core Metadata">
	            <METS:xmlData>
	                <dc:title>Front Cover</dc:title>
	                <dc:creator/>
	                <dc:date>1984</dc:date>
	                <dc:type>Article</dc:type>
	                <dc:language>English</dc:language>
	                <dc:source>Bibliographie Karl Barth Band 1:
Ver&#xF6;ffentlichungen von Karl Barth (1984)</dc:source>
	                <dc:coverage>fa-fb</dc:coverage>
	                <dc:description/>
	                <dc:subject/>
	            </METS:xmlData>
	        </METS:mdWrap>
	    </METS:dmdSec> 

	 

	What I want is to have the search search everything but the
source field.  I'm up for any suggestions!

	 

	Thanks,

	Nicole C. Engard

	Metadata Librarian

	Princeton Theological Seminary Libraries

	Email: nicole.engard at ptsem.edu

	Phone: 609.430.2773

	Web: http://libweb.ptsem.edu 

	 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://xqzone.marklogic.com/pipermail/general/attachments/20071012/18e00d7d/attachment-0001.html


More information about the General mailing list