Brand new to this sort of thing so bear with me.
For sake of simplicity, I've got a two field document, title and rank.
Title gets searched on, rank has values from 1 to 10. 1 being highest.
What I'd like to do is boost results of searches on title based on the
documents rank.
Because it's fairly cut and dry, I was hoping to do it during indexing. I
have this in my DIH transformer..
var docBoostVal = 0;
switch (rank) {
case '1':
docBoostVal = 3.0;
break;
case '2':
docBoostVal = 2.6;
break;
case '3':
docBoostVal = 2.2;
break;
case '4':
docBoostVal = 1.8;
break;
case '5':
docBoostVal = 1.5;
break;
case '6':
docBoostVal = 1.2;
break;
case '7':
docBoostVal = 0.9;
break;
case '8':
docBoostVal = 0.7;
break;
case '9':
docBoostVal = 0.5;
break;
}
row.put('$docBoost',docBoostVal);
It's my understanding that with this, I can simply do the same /select
queries I've been doing and expect documents to be boosted, but that doesn't
seem to be happening because I'm seeing things like this in the results...
{"title":"Some title 1",
"rank":10,
"score":0.11726039},
{"title":"Some title 2",
"rank":7,
"score":0.11726039},
Pretty much everything with the same score. Whatever I'm doing isn't making
its way through. (To cover my bases I did try the case statement with
integers rather than strings, same result)
With that not working I started looking at other options. Starting playing
with dismax.
I'm able to add this to a query string a get results I'm somewhat
expecting...
bq=rank:1^3.0 rank:2^2.6 rank:3^2.2 rank:4^1.8 rank:5^1.5 rank:6^1.2
rank:7^0.9 rank:8^0.7 rank:9^0.5
...but I guess I wasn't expecting it to ONLY rank based on those factors.
That essentially gives me a sort by rank.
Trying to be super inclusive with the search, so while I'm fiddling my
mm=1<1. As expected, a q= like q=red door is returning everything that
contains Red and door. But I was hoping that items that matched "red door"
exactly would sort closer to the top. And if that exact match was a rank 7
that it's score wouldn't be exactly the same as all the other rank 7s?
Ditto if I searched for "q=The Tales Of", anything possessing all 3 terms
would sort closer to the top...and possessing two terms behind them...and
possessing 1 term behind them, and within those groups weight heavily on by
rank.
I think I understand that the score is based entirely on the boosts I
provide...so how do I get something more like what I'm looking for?
Along those lines, I initially had put something like this in my defaults...
<str name="bf">
rank:1^10.0 rank:2^9.0 rank:3^8.0 rank:4^7.0 rank:5^6.0 rank:6^5.0
rank:7^4.0 rank:8^3.0 rank:9^2.0
</str>
...but that was not working, queries fail with a syntax exception. Guessing
this won't work?
Thanks in advance for any help you can provide.
--
View this message in context:
http://lucene.472066.n3.nabble.com/Document-boosting-troubles-tp902982p902982.html
Sent from the Solr - User mailing list archive at Nabble.com.