Hi,

I use various ID fields as the keys for various ExternalFileField fields,
and I have noticed that I will sometimes get the following error:

ERROR org.apache.solr.servlet.SolrDispatchFilter  รป
null:java.lang.NullPointerException
        at
org.apache.solr.search.function.FileFloatSource.getFloats(FileFloatSource.java:273)
        at
org.apache.solr.search.function.FileFloatSource.access$000(FileFloatSource.java:51)
        at
org.apache.solr.search.function.FileFloatSource$2.createValue(FileFloatSource.java:147)
        at
org.apache.solr.search.function.FileFloatSource$Cache.get(FileFloatSource.java:190)
        at
org.apache.solr.search.function.FileFloatSource.getCachedFloats(FileFloatSource.java:141)
        at
org.apache.solr.search.function.FileFloatSource.getValues(FileFloatSource.java:84)
        at
org.apache.solr.response.transform.ValueSourceAugmenter.transform(ValueSourceAugmenter.java:95)
        at
org.apache.solr.response.TextResponseWriter.writeDocuments(TextResponseWriter.java:252)
        at
org.apache.solr.response.TextResponseWriter.writeVal(TextResponseWriter.java:170)
        at
org.apache.solr.response.JSONWriter.writeNamedListAsMapWithDups(JSONResponseWriter.java:184)
        at
org.apache.solr.response.JSONWriter.writeNamedList(JSONResponseWriter.java:300)
        at
org.apache.solr.response.JSONWriter.writeResponse(JSONResponseWriter.java:96)
        at
org.apache.solr.response.JSONResponseWriter.write(JSONResponseWriter.java:61)
        at
org.apache.solr.servlet.SolrDispatchFilter.writeResponse(SolrDispatchFilter.java:765)
        at
org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:426)
        at
org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:207)
        at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419)
        at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455)
        at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
        at
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
        at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
        at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075)
        at
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384)
        at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
        at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009)
        at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
        at
org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
        at
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
        at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
        at org.eclipse.jetty.server.Server.handle(Server.java:368)
        at
org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
        at
org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)
        at
org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:942)
        at
org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1004)
        at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:640)
        at
org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
        at
org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)
        at
org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264)
        at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
        at
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
        at java.lang.Thread.run(Unknown Source)



The source code referenced in the error is below (FileFloatSource.java:273):

TermsEnum termsEnum = MultiFields.getTerms(reader, idName).iterator(null);

So if there are no terms in the index for the key field, then getTerms will
return null, and of course trying to call iterator on null will cause the
exception.

For my use-case, it makes sense that the key field may have no terms
(initially) because there are various types of documents sharing the index,
and they will not all exist at the onset. The default value for the EFF
would suffice in those cases.

Is this worthy of a JIRA? I have gone through whatever documentation I can
find for ExternalFileField and I can't seem to find anything about
requiring key terms first. It seems that this error is not encountered
often because users generally set the unique key field as the external file
key field, so it always exists.

The workaround is to ensure at least one document contains a value for the
key fields.

Regards,
Matt

Reply via email to