Hi,
I want to score searches with multiple conditions e.g.
let $data:=( <r><a>red apple</a></r>, <r><a>blue lagoon</a></r>, <r><b>fish and chips</b></r>)
for $hit score $s in $data[ a contains text("red") or b contains text("fish")]
return $s
In 7.8.2 it always returns scores of zero. In version 7.6 it returns numbers like 0.6201145069582775 0.4528324252639413
Is this bug? Regards /Andy
Hi Andy,
as we haven't managed so far to formalize scoring propagation for all XQuery expressions, and as we thought that XQuery itself can also be used to combine score values, we have recently decided to reduce our scoring to the most essential operation (namely, "contains text").
One solution to get this working again is:
let $data:= ( <r><a>red apple</a></r>, <r><a>blue lagoon</a></r>, <r><b>fish and chips</b></r> ) for $hit in $data let score $a := $hit/a contains text "red" let score $b := $hit/b contains text "fish" let $score := ($a + $b) div 2 where $score return $hit
The advantage is that you can decide by yourself how you want to combine scores. The drawback, obviously, is that your code gets more complex.
Best, Christian
On Thu, Apr 10, 2014 at 6:27 PM, Andy Bunce bunce.andy@gmail.com wrote:
Hi,
I want to score searches with multiple conditions e.g.
let $data:=( <r><a>red apple</a></r>, <r><a>blue lagoon</a></r>, <r><b>fish and chips</b></r>)
for $hit score $s in $data[ a contains text("red") or b contains text("fish")]
return $s
In 7.8.2 it always returns scores of zero. In version 7.6 it returns numbers like 0.6201145069582775 0.4528324252639413
Is this bug? Regards /Andy
Hi Christian,
Thanks, that works for me. I always prefer less complex code :-) so it would be nice if this feature made a return at some point.
Regards /Andy
On Fri, Apr 11, 2014 at 12:04 PM, Christian Grün christian.gruen@gmail.comwrote:
Hi Andy,
as we haven't managed so far to formalize scoring propagation for all XQuery expressions, and as we thought that XQuery itself can also be used to combine score values, we have recently decided to reduce our scoring to the most essential operation (namely, "contains text").
One solution to get this working again is:
let $data:= ( <r><a>red apple</a></r>, <r><a>blue lagoon</a></r>, <r><b>fish and chips</b></r> ) for $hit in $data let score $a := $hit/a contains text "red" let score $b := $hit/b contains text "fish" let $score := ($a + $b) div 2 where $score return $hit
The advantage is that you can decide by yourself how you want to combine scores. The drawback, obviously, is that your code gets more complex.
Best, Christian
On Thu, Apr 10, 2014 at 6:27 PM, Andy Bunce bunce.andy@gmail.com wrote:
Hi,
I want to score searches with multiple conditions e.g.
let $data:=( <r><a>red apple</a></r>, <r><a>blue lagoon</a></r>, <r><b>fish and chips</b></r>)
for $hit score $s in $data[ a contains text("red") or b contains text("fish")]
return $s
In 7.8.2 it always returns scores of zero. In version 7.6 it returns numbers like 0.6201145069582775
0.4528324252639413
Is this bug? Regards /Andy
Hi Andy,
Thanks, that works for me. I always prefer less complex code :-) so it would be nice if this feature made a return at some point.
So it did: In the latest snapshot, scores will again be propagated when using and, or, and predicates [2].
Cheers, Christian
[1] http://files.basex.org/releases/latest/ [2] http://docs.basex.org/wiki/Full-Text#Scoring
basex-talk@mailman.uni-konstanz.de