Hi Surajit,

I can think of a few ways to accomplish this.

Probably the easiest is to set a weight for word query on the "title" element 
in the "http://www.sb.com/namespaces/sb"; namespace.  To so this, go to the word 
query section of your database configuration and configure an include for that 
QName with a weight greater than 1.0.  Similarly for the desc QName.  Doing it 
this way will "bake" that weighting into the indexes.  Note that it will do 
this for all instances of this QName in the database, though, so make sure that 
is OK for your application.

If you want something more restrictive than the above approach, you can parse 
the text yourself and then create your own cts:query, and then pass that to 
search:resolve.  search:resolve is just like search:search except that you do 
the query parsing.  You can create your cts:query however you like, and give 
each part the weights you desire.  You can even use search:parse to initially 
parse the query, and then take its output and modify it to weight the title 
element differently (although this might be tricky to get right).  You will 
have to do some slightly tricky boolean logic to do this, but it is possible.  
If you use all of the grammar of the search API, it will be trickier.    

I think there are probably other ways, too, but this ought to give you a few 
things to think about.

-Danny




From: [email protected] 
[mailto:[email protected]] On Behalf Of Surajit 
Bhattacharjee
Sent: Wednesday, August 12, 2009 2:01 PM
To: General Mark Logic Developer Discussion
Subject: [MarkLogic Dev General] applying relevance weights to XML tags

I have 10 documents loaded in Mark Logic, each containing information about a 
single book. Below is a sample document. 

<?xml version="1.0" encoding="UTF-8"?>
<book xmlns="http://www.sb.com/namespaces/sb";>
<title>The Life of David Gale</title>
<genre>fiction</genre>
<desc>....</desc>
<review>...</review>
</book>

My search goes against the entire document but I want it to apply a higher 
weight to matches in the TITLE as opposed to DESC. I have read the 
documentation but it isn't clear how I can get that to happen.

Below is my search code using the new search API.

xquery version "1.0-ml";
import module namespace search = "http://marklogic.com/appservices/search";
at "/MarkLogic/appservices/search/search.xqy";
search:search("life",
<options xmlns="http://marklogic.com/appservices/search";>
  <constraint name="facet-on-genre">
      <range type="xs:string" facet="true">
          <facet-option>limit=10</facet-option>
          <element ns="http://www.sb.com/namespaces/sb"; name="genre"/>
      </range>
  </constraint>
</options>)

Surajit
_______________________________________________
General mailing list
[email protected]
http://xqzone.com/mailman/listinfo/general

Reply via email to