On May 24, 2006, at 12:49 PM, Doug Cutting wrote:

and change over the various Query subclasses to request it via a new Query.getSimilarity(Searcher searcher, String Field) method.

I don't see the need for the latter. TermQuery.getSimilarity (Searcher) could simply call Searcher.getSimilarity(String field), no?

Yes, that'd work.

That would work for TermQuery and PhraseQuery, as they're both limited to a single field. Assessing whether it would work for BooleanQuery is confusing. Various clauses in BooleanQuery can have different fields. The main concern I have is that each subquery not have an incorrect Similarity instance imposed on it from above by the parent BooleanQuery.

I don't follow. BooleanQuery doesn't call tf(), so its okay if it still calls Searcher.getSimilarity(), right?

I think I agree.

I'm imagining that there would be some API along the lines of setSimilarity(String field, Similarity sim) at the Searcher level. What I'm worried about is that some parent would have its Similarity instance determined by Query.getSimilarity(Searcher searcher) and that it would then lose track of the override that was performed at the Searcher level and supply the wrong Similarity to a child.

Not being familiar with all of the Query classes and how they expand into Scorers, I feel like I have to go spelunk all of them to make sure that no Query ever propagates its Similarity instance to a child in such a way. Making the broad statement that all instances of Query.getSimilarity(Searcher searcher) should be replaced with Query.getSimilarity(Searcher searcher, String fieldName) was easier. It saved me from having to do the spelunking now, by imposing the requirement that we'd have to do that spelunking later.

Marvin Humphrey
Rectangular Research
http://www.rectangular.com/


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to