On Sun, Oct 11, 2009 at 9:10 AM, Jake Mannix <jake.man...@gmail.com> wrote:

> What do you mean "not something I can plug in on top of my original query"?
>
> Do you mean that you can't do it like the more complex example in the class
> you posted earlier in the thread, where you take a linear combination of
> the
> Map<String, Float> -based score, and the regular text score?
>

Yes exactly.


>
> Another option is to just use the CustomScoreQuery like your other
> attempt is:
>
> --------
> public class QueryTermBoostingQuery extends CustomScoreQuery {
>   private float bias;
>
>  public QueryTermBoostingQuery (Query q, ValueSourceQuery[] vQueries, float
> bias)  {
>    super(q, vQueries);
>    this.bias = bias;
>  }
>
>  @Override
>  public float customScore(int doc, float subQueryScore, float[]
> valSrcScores)   {
>    float termWeightedScore = 0;
>    for(float valSrcScore : valSrcScores) termWeightedScore +=
> valSrcScore;
>     return bias * subQueryScore + (1 - bias) * termWeightedScore;
>  }
> }
>
> And then to use it, you build up some FloatFieldSource instances like
> before:
>
>  FloatFieldSource m1 = // defined like I did in my previous message
>  FloatFieldSource m2 = //...
>  FloatFieldSource m3 = //...
>
>  ValueSourceQuery vsq1 = new ValueSourceQuery(m1);
>  vsq1.setBoost(model1Weight);
>
>  // vsq2 and vsq3 also
>
>  ValueSourceQuery[] vsq = { vsq1, vsq2, vsq3  };
>
>  Query textQuery = QueryParser.parse("company:Microsoft");
>
>  Query q = new QueryTermBoostingQuery(textQuery, vsq, bias);
> -------
>
> Does this work for you?
>

Yes I think this should work! Thanks for taking the time to clearly write up
a solution. Will report back after testing it out.

best,
Scott

Reply via email to