Hi, Ah sorry, I misunderstood, you wanted to score the duplicate match lower! To achieve this, you have to change the coord function in your similarity/BooleanWeight used for this query.
Either way: If you want a group of terms that get only one score if at least one of the terms match (SQL IN), but not add them at all, DisjunctionMaxQuery is fine. I think this is what Benson asked for. ----- Uwe Schindler H.-H.-Meier-Allee 63, D-28213 Bremen http://www.thetaphi.de eMail: [email protected] > -----Original Message----- > From: Uwe Schindler [mailto:[email protected]] > Sent: Friday, April 20, 2012 8:16 AM > To: [email protected]; [email protected] > Subject: RE: DisjunctionMaxQuery and scoring > > Hi, > > I think > > BooleanQuery bq = new BooleanQuery(false); doesn't quite accomplish > > the desired "name IN (dick, rich)" scoring behavior. This is because > (name:dick | > > name:rich) with coord=false would score the 'document' "Dick Rich" > > higher than "Rich" because the former has two term matches and the > > latter only > one. > > In contrast, I think the desire is that one and only one of the terms > > in > the > > document match those in the BooleanQuery so that "Rich" would score > > higher than "Dick Rich", given document length normalization. It's > > almost like a > desire > > for BooleanQuery bq = new BooleanQuery(false); > > bq.set*Maximum*NumberShouldMatch(1); > > I that case DisjunctionMaxQuery is the way to go (it will only count the hit with > highest score and not add scores (coord or not coord doesn't matter here). > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
