IntFieldSource incompatible with sint field type
------------------------------------------------

                 Key: SOLR-693
                 URL: https://issues.apache.org/jira/browse/SOLR-693
             Project: Solr
          Issue Type: Bug
          Components: search
    Affects Versions: 1.3
         Environment: RHEL 5, java6, builtin jetty container
            Reporter: Jerry Quinn


I'm trying to create a custom scoring query in Solr to implement a date bias.  
I have a custom query parser that I'm using, that does nothing but wrap a 
BoostedQuery around the original query, which works in general.

I'm indexing and storing the day number in an sint field.  To implement my 
query, I extract the contents using 
org.apache.solr.search.function.IntFieldSource.  Unfortunately, this throws an 
exception when it executes:

HTTP ERROR: 500

For input string: "€?"

java.lang.NumberFormatException: For input string: "€?"
        at 
java.lang.NumberFormatException.forInputString(NumberFormatException.java:61)
        at java.lang.Integer.parseInt(Integer.java:460)
        at java.lang.Integer.parseInt(Integer.java:510)
        at 
org.apache.lucene.search.FieldCacheImpl$3.parseInt(FieldCacheImpl.java:148)
        at 
org.apache.lucene.search.FieldCacheImpl$7.createValue(FieldCacheImpl.java:262)
        at 
org.apache.lucene.search.FieldCacheImpl$Cache.get(FieldCacheImpl.java:72)
        at 
org.apache.lucene.search.FieldCacheImpl.getInts(FieldCacheImpl.java:245)
        at 
org.apache.lucene.search.FieldCacheImpl.getInts(FieldCacheImpl.java:239)
        at 
org.apache.solr.search.function.IntFieldSource.getValues(IntFieldSource.java:50)
        at 
org.apache.solr.search.function.FunctionQuery$AllScorer.<init>(FunctionQuery.java:103)
        at 
org.apache.solr.search.function.FunctionQuery$FunctionWeight.scorer(FunctionQuery.java:81)
        at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:132)
        at org.apache.lucene.search.Searcher.search(Searcher.java:126)
        at org.apache.lucene.search.Searcher.search(Searcher.java:105)
        at 
org.apache.solr.search.SolrIndexSearcher.getDocListNC(SolrIndexSearcher.java:966)
        at 
org.apache.solr.search.SolrIndexSearcher.getDocListC(SolrIndexSearcher.java:838)
        at 
org.apache.solr.search.SolrIndexSearcher.search(SolrIndexSearcher.java:269)
        at 
org.apache.solr.handler.component.QueryComponent.process(QueryComponent.java:160)
        at 
org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:175)
        at 
org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
        at org.apache.solr.core.SolrCore.execute(SolrCore.java:1151)


I ran into exactly the same problem when I tried to use the CustomScoreQuery 
and IntFieldSource classes from Lucene.

I've tracked the problem down to the fact that IntFieldSource expects the 
contents of the field to actually be an integer as returned by 
FieldCache.getInts().  However, Solr converts a sortable int using 
NumberUtils.int2sortablestr().

If I change my code to create a custom FieldCache.IntParser that applies 
NumberUtils.SortableStr2int before returning the value, my query works as 
expected.  For example:

class MyIntParser implements FieldCache.IntParser {
  public int parseInt(String val) { return NumberUtils.SortedStr2int(val, 0, 
val.length()); }
}

Query q = new BoostedQuery(qry, new IntFieldSource("myfield", new 
MyIntParser()));



-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to