Mattio,

Not sure if it helps, but you could consider permanently boosting the quality of biographies, via xdmp:set-document-quality() or a related function.

If I understand what you're trying to do correctly, you could also make your query test for a matrix of possibilities at runtime. You didn't say what the element name is for your type attribute, but let's say it's 'document'.

let $user-query := 'baseball'
let $query := cts:or-query((
  let $booster := cts:element-attribute-value-query(
    xs:QName('document'), xs:QName('type'), 'biography'
  )
  for $i in (
    $user-query,
    cts:element-word-query(xs:QName('title'), $user-query, (), 16)
  )
  return (
    $i,
    cts:and-query(($booster, $i))
  )
))
return $query

=>
cts:or-query((
  cts:word-query("baseball", ("lang=en"), 1),
  cts:and-query((
    cts:element-attribute-value-query(
      xs:QName("document"), xs:QName("type"), "biography",
      ("lang=en"), 1
    ),
    cts:word-query("baseball", ("lang=en"), 1)
  ), ()),
  cts:element-word-query(
    xs:QName("title"), "baseball", ("lang=en"), 16),
  cts:and-query((
    cts:element-attribute-value-query(
      xs:QName("document"), xs:QName("type"), "biography",
      ("lang=en"), 1
    ),
    cts:element-word-query(
      xs:QName("title"), "baseball", ("lang=en"), 16)
  ), ())
))

You can probably see why I wrote a query to generate that query :-).

Note that I didn't actually boost the score for the biography matches: they'll be boosted by TF/IDF naturally, as will the title matches (assuming title matches are less frequent, in TF/IDF terms, than word-query matches are). Very often, there isn't much reason to explicitly boost query terms.

You might also think about creating a field for this query, if it's a frequently-used search strategy for your application.

-- Mike

Mattio Valentino wrote:
I'm not sure if I'm going to express this correctly but I hope it's clear.

I have a query that searches for a term.  If the term occurs in a
title or head element, the score is boosted.

cts:or-query((
  cts:word-query("baseball", (), 1),
  cts:element-word-query(
    (xs:QName("title"), xs:QName("head")), "baseball", (), 16
  )
))

If I have two documents where one has an attribute type="biography",
can I form the query to return *both* documents but boost the score up
further on the "biography" one?

This has been stewing for a few days now and I've been trying
different versions in cq, but I can't see how to put the cts:query
constructors together to do it.

Thanks for any help,
Matt
_______________________________________________
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