Hi everybody,
it's been a while since I try to figure out the difference between the
scoring of span and boolean
queries with little success. All stems from the observation that the
boost of SpanTermQuery as
leaves of the query tree does not seem to have much influence on the
resulting scores of the
documents. Looking into the source code (1.9.1) I found the computing of
weights to be somewhat
different according to the query type (I am not that comfortable with
the source code :-)
*org.apache.lucene.search.BooleanQuery.BooleanWeight* :
*public* BooleanWeight(Searcher searcher)
*throws* IOException {
*this*.similarity = getSimilarity(searcher);
*for* (*int* i = 0 ; i < clauses.size(); i++) {
BooleanClause c = (BooleanClause)clauses.elementAt(i);
weights.add(c.getQuery().createWeight(searcher));
}
}
which looks to me like a recursive descent through the tree, taking in
account
the weights of all the nodes, whereas :
*org.apache.lucene.search.spans.SpanWeight* :
*public* SpanWeight(SpanQuery query, Searcher searcher)
*throws* IOException {
*this*.similarity = query.getSimilarity(searcher);
*this*.query = query;
*this*.terms = query.getTerms();
idf = *this*.query.getSimilarity(searcher).idf(terms, searcher);
}
lacks any traversal and according to what I have understood so far from
the rest
of the code, only takes in account the boost of the tree root in
SumOfSquareWeights,
which is consistent with the resulting scores not considering the boost
of my tree
leaves.
I am missing something ? Is it intented or is it a bug ?
Thanks in advance.
Regards.
Vincent