I created a JIRA to fix this problem: https://issues.apache.org/jira/browse/LUCENE-2855
On Sat, Jan 8, 2011 at 1:32 AM, Adriano Crestani <adrianocrest...@gmail.com>wrote: > Hi Christopher, > > Thanks for raising this problem, I always thought a little bit strange to > use CharSequence as map key. Then a just did a little bit of research and > found this on CharSequence javadoc: > > "This interface does not refine the general contracts of the > equals<http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#equals(java.lang.Object)> > and > hashCode<http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#hashCode()> > methods. The result of comparing two objects that implement CharSequence is > therefore, in general, undefined. Each object may be implemented by a > different class, and there is no guarantee that each class will be capable > of testing its instances for equality with those of the other. It is > therefore inappropriate to use arbitrary CharSequence instances as > elements in a set or as keys in a map." > > So I think every Set or Map that uses CharSequence on contrib queryparser > should be forced to use String instead. I think there is no need to change > any API, we just need to make sure that toString() is invoked on the > CharSequence object before adding it to any Set or Map, this way we can fix > this problem for next 3.x release. However, for 4.x, we should ideally > change every API that receives or return Map<CharSequence,...> or > Set<CharSequence> to use only String. > > > > On Fri, Jan 7, 2011 at 8:44 PM, Christopher St John <ckstj...@gmail.com>wrote: > >> I'm trying to: >> >> StandardQueryTreeBuilder b = …; >> b.setBuilder( "myfield", fieldSpecificBuilder); >> >> In the debugger I see that the builder is registered in the >> QueryTreeBuilder's fieldNameBuilders map. >> >> When parsing, QueryTreeBuilder.getBuilder tries to look >> up the builder by using the FieldableNode's field but the >> debugger says the node's field is an UnescapedCharSequence, >> not a String, and the lookup fails. >> >> Registering the builder with an UnescapedCharSequence >> for the name instead of a String doesn't seem to help, >> presumably because UCS doesn't have a hash an equals >> or hash method. >> >> Suggestions? I've worked around it by registering a class >> based builder, checking for the field name and either >> delegating to the original builder or doing my custom >> processing, but it's a little awkward. >> >> -cks >> >> -- >> Christopher St. John >> http://artofsystems.blogspot.com >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org >> For additional commands, e-mail: java-user-h...@lucene.apache.org >> >> >