You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by Neil Ireson <n....@sheffield.ac.uk> on 2014/10/22 13:53:00 UTC
NPE when using pivots
Bit of a weird one and not sure if this counts as a bug.
I erroneously created a filter which correctly filters a term into the index (e.g. clouds -> cloud), however if that term is filtered again it returns no value (e.g. cloud -> null). This was an invisible issue until I used pivoting. If I used the caches then I got:
SEVERE: java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.hash(ConcurrentHashMap.java:333)
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:988)
at org.apache.solr.util.ConcurrentLRUCache.get(ConcurrentLRUCache.java:89)
at org.apache.solr.search.FastLRUCache.get(FastLRUCache.java:130)
at org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1232)
at org.apache.solr.handler.component.PivotFacetProcessor.getSubset(PivotFacetProcessor.java:244)
However if I turned the caches off I got a more descriptive error:
SEVERE: java.lang.IllegalArgumentException: Query and filter cannot be null.
at org.apache.lucene.search.FilteredQuery.<init>(FilteredQuery.java:68)
at org.apache.lucene.search.FilteredQuery.<init>(FilteredQuery.java:54)
at org.apache.lucene.search.IndexSearcher.wrapFilter(IndexSearcher.java:228)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:297)
at org.apache.solr.search.SolrIndexSearcher.getDocSetNC(SolrIndexSearcher.java:1197)
at org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1241)
at org.apache.solr.handler.component.PivotFacetProcessor.getSubset(PivotFacetProcessor.java:244)
The issue seems to be in the PivotFacetProcessor.getSubset method in the following two lines
Query query = ft.getFieldQuery(null, field, pivotValue);
return searcher.getDocSet(query, base);
In my case ft.getFieldQuery returns a null, which causes the Exception.
As I said my filter was incorrect, however there may be some weird, but valid, case where the filter does change the term if it’s passed through multiple times (something like a decrement number or date filter). In which case the PivotFacetProcessor would not cause a NPE but would produce incorrect values.
So...
1) It might be nice to throw a similar Exception if the caches are used
2) I’m not sure why the pivotValue, which is taken from the index, is re-parsed through the filters. Surely if the value is taken from the index it would be more efficient (and correct) to just create a TermQuery.
N
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org
Re: NPE when using pivots
Posted by Neil Ireson <n....@sheffield.ac.uk>.
Firstly apologies as I originally sent this to the dev list by mistake...
Bit of a weird one and not sure if this counts as a bug.
I erroneously created a filter which correctly filters a term into the index (e.g. clouds -> cloud), however if that term is filtered again it returns no value (e.g. cloud -> null). This was an invisible issue until I used pivoting. If I used the caches then I got:
SEVERE: java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.hash(ConcurrentHashMap.java:333)
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:988)
at org.apache.solr.util.ConcurrentLRUCache.get(ConcurrentLRUCache.java:89)
at org.apache.solr.search.FastLRUCache.get(FastLRUCache.java:130)
at org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1232)
at org.apache.solr.handler.component.PivotFacetProcessor.getSubset(PivotFacetProcessor.java:244)
However if I turned the caches off I got a more descriptive error:
SEVERE: java.lang.IllegalArgumentException: Query and filter cannot be null.
at org.apache.lucene.search.FilteredQuery.<init>(FilteredQuery.java:68)
at org.apache.lucene.search.FilteredQuery.<init>(FilteredQuery.java:54)
at org.apache.lucene.search.IndexSearcher.wrapFilter(IndexSearcher.java:228)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:297)
at org.apache.solr.search.SolrIndexSearcher.getDocSetNC(SolrIndexSearcher.java:1197)
at org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1241)
at org.apache.solr.handler.component.PivotFacetProcessor.getSubset(PivotFacetProcessor.java:244)
The issue seems to be in the PivotFacetProcessor.getSubset method in the following two lines
Query query = ft.getFieldQuery(null, field, pivotValue);
return searcher.getDocSet(query, base);
In my case ft.getFieldQuery returns a null, which causes the Exception.
As I said my filter was incorrect, however there may be some weird, but valid, case where the filter does change the term if it’s passed through multiple times (something like a decrement number or date filter). In which case the PivotFacetProcessor would not cause a NPE but would produce incorrect values.
So...
1) It might be nice to throw a similar Exception if the caches are used
2) I’m not sure why the pivotValue, which is taken from the index, is re-parsed through the filters. Surely if the value is taken from the index it would be more efficient (and correct) to just create a TermQuery.
N