You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@solr.apache.org by Grace Sainsbury <gr...@gmail.com> on 2023/02/06 18:06:22 UTC

NullPointerException when using facets in More Like This Query

I have a MoreLikeThis query handler set up on my index:

<requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
    <lst name="defaults">
      <str name="echoParams">all</str>
      <int name="rows">10</int>
       <str name="mlt.fl">text</str>
    </lst>
  </requestHandler>

If I use faceting on a query with no no tagging and exclusion everything
works as expected. eg:

/mlt?facet.field=genre&facet.mincount=1&facet=true&fq=genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{
DOCUMENT_ID}

If I add tagging and exclusion the facet counts are not returned and I get
a null pointer exception:

mlt?facet.field={!ex=g}genre&facet.mincount=1&facet=true&fq={!tag=g}genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{DOCUMENT_ID}

This is the stack trace:

java.lang.NullPointerException
> at java.base/java.util.Objects.requireNonNull(Objects.java:208)
> at
> com.github.benmanes.caffeine.cache.BoundedLocalCache.put(BoundedLocalCache.java:2196)
> at
> com.github.benmanes.caffeine.cache.BoundedLocalCache.putIfAbsent(BoundedLocalCache.java:2182)
> at
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:316)
> at
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:291)
> at
> org.apache.solr.search.CaffeineCache.computeAsync(CaffeineCache.java:209)
> at
> org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:250)
> at
> org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:970)
> at
> org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:927)
> at
> org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1192)
> at
> org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1091)
> at
> org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> at org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> at
> org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> at
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> at
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> at
> org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> at
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> at org.apache.solr.core.SolrCore.execute(SolrCore.java:2865)
> at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:887)
> at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:606)
> at
> org.apache.solr.servlet.SolrDispatchFilter.dispatch(SolrDispatchFilter.java:250)
> at
> org.apache.solr.servlet.SolrDispatchFilter.lambda$doFilter$0(SolrDispatchFilter.java:218)
> at
> org.apache.solr.servlet.ServletUtils.traceHttpRequestExecution2(ServletUtils.java:257)
> at
> org.apache.solr.servlet.ServletUtils.rateLimitRequest(ServletUtils.java:227)
> at
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:213)
> at
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:195)
> at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
> at
> org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
> at
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
> at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> at
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
> at
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> at
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
> at
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
> at
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
> at
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
> at
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
> at
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
> at
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
> at
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
> at
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
> at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> at
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191)
> at
> org.eclipse.jetty.server.handler.InetAccessHandler.handle(InetAccessHandler.java:177)
> at
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
> at
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> at
> org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
> at
> org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772)
> at
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> at org.eclipse.jetty.server.Server.handle(Server.java:516)
> at
> org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
> at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
> at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
> at
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
> at
> org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
> at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
> at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
> at
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
> at
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
> at
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
> at
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
> at
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
> at
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
> at
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
> at java.base/java.lang.Thread.run(Thread.java:833)
>

Is there an issue with my configuration?

Thanks,
Grace

Re: NullPointerException when using facets in More Like This Query

Posted by Michael Gibney <mi...@michaelgibney.net>.
Grace, if you'd like to set up a Jira account, you're welcome to;
there are instructions here on how to get that set up:

https://infra.apache.org/jira-guidelines.html#who

(we should update the Solr "community" section and contributor
guidelines to clarify this initial Jira account setup step, which is
relatively recent)

On Mon, Feb 6, 2023 at 10:35 PM Michael Gibney
<mi...@michaelgibney.net> wrote:
>
> I do suspect this is MLT-specific -- I'm not exactly sure how this is
> _supposed_ to work (I'm unfamiliar with MLT), but something seems a
> bit off between these two spots:
> https://github.com/apache/solr/blob/257c93c956a66f805e23f4835cab88e7a1fe9201/solr/core/src/java/org/apache/solr/handler/MoreLikeThisHandler.java#L219-L221
> https://github.com/apache/solr/blob/83de120de950fee3876a9e3a6b344b403630ae06/solr/core/src/java/org/apache/solr/request/SimpleFacets.java#L223-L226
>
> The former constructs a ResponseBuilder object, but doesn't init it at
> all -- afaict getQuery() and getFilters() and many other methods on
> the resulting ResponseBuilder object will always return null/empty?
> The comment in the latter snippet of code suggests that
> `SimpleFacets.rb == null` is expected to have some semantic
> significance, maybe even particularly coming from MLT? So perhaps
> constructing an uninitialized ResponseBuilder object in MLT violates
> some opaque assumptions/logic in SimpleFacets, in a way that isn't
> actually exercised unless `tagMap != null`.
>
> In running the test patch locally, it seems the NPE is actually thrown
> on the _key_ (Query -- maybe a consequence of the uninitialized
> ResponseBuilder?), so I think this may never even get to the point of
> generating a null DocSet.
>
> On Mon, Feb 6, 2023 at 3:35 PM Mikhail Khludnev <mk...@apache.org> wrote:
> >
> > Devs, heads up!
> >
> > At first glance this failure doesn't look like mlt specific. It just falls
> > down on NPE when it has no result (null docset, ha!) in fq and then
> > attempts to cache null. Not good, you know. I hope I'm wrong.
> >
> > $ git diff
> > diff --git
> > a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.ja
> > va b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> > index c218b08938e..bac430b12d4 100644
> > ---
> > a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> > +++
> > b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> > @@ -246,6 +246,14 @@ public class MoreLikeThisHandlerTest extends
> > SolrTestCaseJ4 {
> >            "//result/doc[1]/str[@name='id'][.='45']",
> >
> >  "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='name'
> > ]/int[@name='George'][.='1']");
> >      }
> > +    params.set("facet.field", "{!ex=tg}name");
> > +    params.set("fq","{!tag=tg}name:NoGeorge");
> > +    try(SolrQueryRequest mltreq = new LocalSolrQueryRequest(core, params)){
> > +      assertQ(
> > +              mltreq,
> > +              "//result/doc[1]/str[@name='id'][.='45']",
> > +
> >  "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='n
> > ame']/int[@name='George'][.='1']");
> > +    }
> >    }
> >
> >    @Test
> >
> >
> > java.lang.NullPointerException: null
> > at java.util.Objects.requireNonNull(Objects.java:221) ~[?:?]
> > at
> > com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2585)
> > ~[caffeine-3.1.2.jar:?]
> > at
> > com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:106)
> > ~[caffeine-3.1.2.jar:?]
> > at
> > com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62)
> > ~[caffeine-3.1.2.jar:?]
> > at
> > org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:254)
> > ~[main/:?]
> > at
> > org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:972)
> > ~[main/:?]
> > at
> > org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:928)
> > ~[main/:?]
> > at
> > org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1186)
> > ~[main/:?]
> > at
> > org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1097)
> > ~[main/:?]
> > at
> > org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> > ~[main/:?]
> > at org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> > ~[main/:?]
> > at
> > org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> > ~[main/:?]
> > at
> > org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> > ~[main/:?]
> > at
> > org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> > ~[main/:?]
> > at
> > org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> > ~[main/:?]
> > at
> > org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> > ~[main/:?]
> > at org.apache.solr.core.SolrCore.execute(SolrCore.java:2890) ~[main/:?]
> > at org.apache.solr.util.TestHarness.query(TestHarness.java:357)
> > ~[solr-test-framework-10.0.0-SNAPSHOT.jar:10.0.0-SNAPSHOT
> > 04ea6dfe56c9a4c914d3dae34577433fd574cd25 [snapshot build, details omitted]]
> >
> > On Mon, Feb 6, 2023 at 9:43 PM Grace Sainsbury <gr...@gmail.com> wrote:
> >
> > > Hi Mikhail,
> > >
> > > I don't have an account to file a JIRA ticket.
> > >
> > > Grace
> > >
> > > On Mon, 6 Feb 2023 at 13:37, Mikhail Khludnev <mk...@apache.org> wrote:
> > >
> > > > Hello, Grace.
> > > > It seems like a bug deserves a JIRA issue at least.
> > > >
> > > > On Mon, Feb 6, 2023 at 9:07 PM Grace Sainsbury <gr...@gmail.com>
> > > wrote:
> > > >
> > > > > I have a MoreLikeThis query handler set up on my index:
> > > > >
> > > > > <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
> > > > >     <lst name="defaults">
> > > > >       <str name="echoParams">all</str>
> > > > >       <int name="rows">10</int>
> > > > >        <str name="mlt.fl">text</str>
> > > > >     </lst>
> > > > >   </requestHandler>
> > > > >
> > > > > If I use faceting on a query with no no tagging and exclusion
> > > everything
> > > > > works as expected. eg:
> > > > >
> > > > >
> > > > >
> > > >
> > > /mlt?facet.field=genre&facet.mincount=1&facet=true&fq=genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{
> > > > > DOCUMENT_ID}
> > > > >
> > > > > If I add tagging and exclusion the facet counts are not returned and I
> > > > get
> > > > > a null pointer exception:
> > > > >
> > > > >
> > > > >
> > > >
> > > mlt?facet.field={!ex=g}genre&facet.mincount=1&facet=true&fq={!tag=g}genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{DOCUMENT_ID}
> > > > >
> > > > > This is the stack trace:
> > > > >
> > > > > java.lang.NullPointerException
> > > > > > at java.base/java.util.Objects.requireNonNull(Objects.java:208)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > com.github.benmanes.caffeine.cache.BoundedLocalCache.put(BoundedLocalCache.java:2196)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > com.github.benmanes.caffeine.cache.BoundedLocalCache.putIfAbsent(BoundedLocalCache.java:2182)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:316)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:291)
> > > > > > at
> > > > > >
> > > > org.apache.solr.search.CaffeineCache.computeAsync(CaffeineCache.java:209)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:250)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:970)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:927)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1192)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1091)
> > > > > > at
> > > > > >
> > > > org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> > > > > > at
> > > > > org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> > > > > > at org.apache.solr.core.SolrCore.execute(SolrCore.java:2865)
> > > > > > at
> > > org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:887)
> > > > > > at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:606)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.apache.solr.servlet.SolrDispatchFilter.dispatch(SolrDispatchFilter.java:250)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.apache.solr.servlet.SolrDispatchFilter.lambda$doFilter$0(SolrDispatchFilter.java:218)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.apache.solr.servlet.ServletUtils.traceHttpRequestExecution2(ServletUtils.java:257)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.apache.solr.servlet.ServletUtils.rateLimitRequest(ServletUtils.java:227)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:213)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:195)
> > > > > > at
> > > > org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
> > > > > > at
> > > > > >
> > > > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.server.handler.InetAccessHandler.handle(InetAccessHandler.java:177)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > > at org.eclipse.jetty.server.Server.handle(Server.java:516)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
> > > > > > at
> > > org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
> > > > > > at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
> > > > > > at
> > > > > > org.eclipse.jetty.io
> > > > > .AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
> > > > > > at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
> > > > > > at org.eclipse.jetty.io
> > > > .ChannelEndPoint$1.run(ChannelEndPoint.java:104)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > > org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
> > > > > > at java.base/java.lang.Thread.run(Thread.java:833)
> > > > > >
> > > > >
> > > > > Is there an issue with my configuration?
> > > > >
> > > > > Thanks,
> > > > > Grace
> > > > >
> > > >
> > > >
> > > > --
> > > > Sincerely yours
> > > > Mikhail Khludnev
> > > > https://t.me/MUST_SEARCH
> > > > A caveat: Cyrillic!
> > > >
> > >
> >
> >
> > --
> > Sincerely yours
> > Mikhail Khludnev
> > https://t.me/MUST_SEARCH
> > A caveat: Cyrillic!

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@solr.apache.org
For additional commands, e-mail: dev-help@solr.apache.org


Re: NullPointerException when using facets in More Like This Query

Posted by Mikhail Khludnev <mk...@apache.org>.
Right, Michael. MLTHandler refuses to init rb.query, but facets needs it
for evaluating filters when some of them are excluded.
Grace, I created a jira account for you. Check it out.

On Tue, Feb 7, 2023 at 6:36 AM Michael Gibney <mi...@michaelgibney.net>
wrote:

> I do suspect this is MLT-specific -- I'm not exactly sure how this is
> _supposed_ to work (I'm unfamiliar with MLT), but something seems a
> bit off between these two spots:
>
> https://github.com/apache/solr/blob/257c93c956a66f805e23f4835cab88e7a1fe9201/solr/core/src/java/org/apache/solr/handler/MoreLikeThisHandler.java#L219-L221
>
> https://github.com/apache/solr/blob/83de120de950fee3876a9e3a6b344b403630ae06/solr/core/src/java/org/apache/solr/request/SimpleFacets.java#L223-L226
>
> The former constructs a ResponseBuilder object, but doesn't init it at
> all -- afaict getQuery() and getFilters() and many other methods on
> the resulting ResponseBuilder object will always return null/empty?
> The comment in the latter snippet of code suggests that
> `SimpleFacets.rb == null` is expected to have some semantic
> significance, maybe even particularly coming from MLT? So perhaps
> constructing an uninitialized ResponseBuilder object in MLT violates
> some opaque assumptions/logic in SimpleFacets, in a way that isn't
> actually exercised unless `tagMap != null`.
>
> In running the test patch locally, it seems the NPE is actually thrown
> on the _key_ (Query -- maybe a consequence of the uninitialized
> ResponseBuilder?), so I think this may never even get to the point of
> generating a null DocSet.
>
> On Mon, Feb 6, 2023 at 3:35 PM Mikhail Khludnev <mk...@apache.org> wrote:
> >
> > Devs, heads up!
> >
> > At first glance this failure doesn't look like mlt specific. It just
> falls
> > down on NPE when it has no result (null docset, ha!) in fq and then
> > attempts to cache null. Not good, you know. I hope I'm wrong.
> >
> > $ git diff
> > diff --git
> > a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.ja
> > va
> b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> > index c218b08938e..bac430b12d4 100644
> > ---
> > a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> > +++
> > b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> > @@ -246,6 +246,14 @@ public class MoreLikeThisHandlerTest extends
> > SolrTestCaseJ4 {
> >            "//result/doc[1]/str[@name='id'][.='45']",
> >
> >  "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='name'
> > ]/int[@name='George'][.='1']");
> >      }
> > +    params.set("facet.field", "{!ex=tg}name");
> > +    params.set("fq","{!tag=tg}name:NoGeorge");
> > +    try(SolrQueryRequest mltreq = new LocalSolrQueryRequest(core,
> params)){
> > +      assertQ(
> > +              mltreq,
> > +              "//result/doc[1]/str[@name='id'][.='45']",
> > +
> >  "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='n
> > ame']/int[@name='George'][.='1']");
> > +    }
> >    }
> >
> >    @Test
> >
> >
> > java.lang.NullPointerException: null
> > at java.util.Objects.requireNonNull(Objects.java:221) ~[?:?]
> > at
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2585)
> > ~[caffeine-3.1.2.jar:?]
> > at
> >
> com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:106)
> > ~[caffeine-3.1.2.jar:?]
> > at
> >
> com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62)
> > ~[caffeine-3.1.2.jar:?]
> > at
> >
> org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:254)
> > ~[main/:?]
> > at
> >
> org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:972)
> > ~[main/:?]
> > at
> >
> org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:928)
> > ~[main/:?]
> > at
> >
> org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1186)
> > ~[main/:?]
> > at
> >
> org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1097)
> > ~[main/:?]
> > at
> > org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> > ~[main/:?]
> > at
> org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> > ~[main/:?]
> > at
> >
> org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> > ~[main/:?]
> > at
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> > ~[main/:?]
> > at
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> > ~[main/:?]
> > at
> >
> org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> > ~[main/:?]
> > at
> >
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> > ~[main/:?]
> > at org.apache.solr.core.SolrCore.execute(SolrCore.java:2890) ~[main/:?]
> > at org.apache.solr.util.TestHarness.query(TestHarness.java:357)
> > ~[solr-test-framework-10.0.0-SNAPSHOT.jar:10.0.0-SNAPSHOT
> > 04ea6dfe56c9a4c914d3dae34577433fd574cd25 [snapshot build, details
> omitted]]
> >
> > On Mon, Feb 6, 2023 at 9:43 PM Grace Sainsbury <gr...@gmail.com>
> wrote:
> >
> > > Hi Mikhail,
> > >
> > > I don't have an account to file a JIRA ticket.
> > >
> > > Grace
> > >
> > > On Mon, 6 Feb 2023 at 13:37, Mikhail Khludnev <mk...@apache.org> wrote:
> > >
> > > > Hello, Grace.
> > > > It seems like a bug deserves a JIRA issue at least.
> > > >
> > > > On Mon, Feb 6, 2023 at 9:07 PM Grace Sainsbury <gr...@gmail.com>
> > > wrote:
> > > >
> > > > > I have a MoreLikeThis query handler set up on my index:
> > > > >
> > > > > <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
> > > > >     <lst name="defaults">
> > > > >       <str name="echoParams">all</str>
> > > > >       <int name="rows">10</int>
> > > > >        <str name="mlt.fl">text</str>
> > > > >     </lst>
> > > > >   </requestHandler>
> > > > >
> > > > > If I use faceting on a query with no no tagging and exclusion
> > > everything
> > > > > works as expected. eg:
> > > > >
> > > > >
> > > > >
> > > >
> > >
> /mlt?facet.field=genre&facet.mincount=1&facet=true&fq=genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{
> > > > > DOCUMENT_ID}
> > > > >
> > > > > If I add tagging and exclusion the facet counts are not returned
> and I
> > > > get
> > > > > a null pointer exception:
> > > > >
> > > > >
> > > > >
> > > >
> > >
> mlt?facet.field={!ex=g}genre&facet.mincount=1&facet=true&fq={!tag=g}genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{DOCUMENT_ID}
> > > > >
> > > > > This is the stack trace:
> > > > >
> > > > > java.lang.NullPointerException
> > > > > > at java.base/java.util.Objects.requireNonNull(Objects.java:208)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.put(BoundedLocalCache.java:2196)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.putIfAbsent(BoundedLocalCache.java:2182)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:316)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:291)
> > > > > > at
> > > > > >
> > > >
> org.apache.solr.search.CaffeineCache.computeAsync(CaffeineCache.java:209)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:250)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:970)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:927)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1192)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1091)
> > > > > > at
> > > > > >
> > > >
> org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> > > > > > at
> > > > >
> org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> > > > > > at org.apache.solr.core.SolrCore.execute(SolrCore.java:2865)
> > > > > > at
> > > org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:887)
> > > > > > at
> org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:606)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.apache.solr.servlet.SolrDispatchFilter.dispatch(SolrDispatchFilter.java:250)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.apache.solr.servlet.SolrDispatchFilter.lambda$doFilter$0(SolrDispatchFilter.java:218)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.apache.solr.servlet.ServletUtils.traceHttpRequestExecution2(ServletUtils.java:257)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.apache.solr.servlet.ServletUtils.rateLimitRequest(ServletUtils.java:227)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:213)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:195)
> > > > > > at
> > > >
> org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
> > > > > > at
> > > > > >
> > > >
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.server.handler.InetAccessHandler.handle(InetAccessHandler.java:177)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > > at org.eclipse.jetty.server.Server.handle(Server.java:516)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
> > > > > > at
> > > org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
> > > > > > at
> org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
> > > > > > at
> > > > > > org.eclipse.jetty.io
> > > > >
> .AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
> > > > > > at org.eclipse.jetty.io
> .FillInterest.fillable(FillInterest.java:105)
> > > > > > at org.eclipse.jetty.io
> > > > .ChannelEndPoint$1.run(ChannelEndPoint.java:104)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
> > > > > > at java.base/java.lang.Thread.run(Thread.java:833)
> > > > > >
> > > > >
> > > > > Is there an issue with my configuration?
> > > > >
> > > > > Thanks,
> > > > > Grace
> > > > >
> > > >
> > > >
> > > > --
> > > > Sincerely yours
> > > > Mikhail Khludnev
> > > > https://t.me/MUST_SEARCH
> > > > A caveat: Cyrillic!
> > > >
> > >
> >
> >
> > --
> > Sincerely yours
> > Mikhail Khludnev
> > https://t.me/MUST_SEARCH
> > A caveat: Cyrillic!
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@solr.apache.org
> For additional commands, e-mail: dev-help@solr.apache.org
>
>

-- 
Sincerely yours
Mikhail Khludnev
https://t.me/MUST_SEARCH
A caveat: Cyrillic!

Re: NullPointerException when using facets in More Like This Query

Posted by Michael Gibney <mi...@michaelgibney.net>.
I do suspect this is MLT-specific -- I'm not exactly sure how this is
_supposed_ to work (I'm unfamiliar with MLT), but something seems a
bit off between these two spots:
https://github.com/apache/solr/blob/257c93c956a66f805e23f4835cab88e7a1fe9201/solr/core/src/java/org/apache/solr/handler/MoreLikeThisHandler.java#L219-L221
https://github.com/apache/solr/blob/83de120de950fee3876a9e3a6b344b403630ae06/solr/core/src/java/org/apache/solr/request/SimpleFacets.java#L223-L226

The former constructs a ResponseBuilder object, but doesn't init it at
all -- afaict getQuery() and getFilters() and many other methods on
the resulting ResponseBuilder object will always return null/empty?
The comment in the latter snippet of code suggests that
`SimpleFacets.rb == null` is expected to have some semantic
significance, maybe even particularly coming from MLT? So perhaps
constructing an uninitialized ResponseBuilder object in MLT violates
some opaque assumptions/logic in SimpleFacets, in a way that isn't
actually exercised unless `tagMap != null`.

In running the test patch locally, it seems the NPE is actually thrown
on the _key_ (Query -- maybe a consequence of the uninitialized
ResponseBuilder?), so I think this may never even get to the point of
generating a null DocSet.

On Mon, Feb 6, 2023 at 3:35 PM Mikhail Khludnev <mk...@apache.org> wrote:
>
> Devs, heads up!
>
> At first glance this failure doesn't look like mlt specific. It just falls
> down on NPE when it has no result (null docset, ha!) in fq and then
> attempts to cache null. Not good, you know. I hope I'm wrong.
>
> $ git diff
> diff --git
> a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.ja
> va b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> index c218b08938e..bac430b12d4 100644
> ---
> a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> +++
> b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> @@ -246,6 +246,14 @@ public class MoreLikeThisHandlerTest extends
> SolrTestCaseJ4 {
>            "//result/doc[1]/str[@name='id'][.='45']",
>
>  "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='name'
> ]/int[@name='George'][.='1']");
>      }
> +    params.set("facet.field", "{!ex=tg}name");
> +    params.set("fq","{!tag=tg}name:NoGeorge");
> +    try(SolrQueryRequest mltreq = new LocalSolrQueryRequest(core, params)){
> +      assertQ(
> +              mltreq,
> +              "//result/doc[1]/str[@name='id'][.='45']",
> +
>  "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='n
> ame']/int[@name='George'][.='1']");
> +    }
>    }
>
>    @Test
>
>
> java.lang.NullPointerException: null
> at java.util.Objects.requireNonNull(Objects.java:221) ~[?:?]
> at
> com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2585)
> ~[caffeine-3.1.2.jar:?]
> at
> com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:106)
> ~[caffeine-3.1.2.jar:?]
> at
> com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62)
> ~[caffeine-3.1.2.jar:?]
> at
> org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:254)
> ~[main/:?]
> at
> org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:972)
> ~[main/:?]
> at
> org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:928)
> ~[main/:?]
> at
> org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1186)
> ~[main/:?]
> at
> org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1097)
> ~[main/:?]
> at
> org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> ~[main/:?]
> at org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> ~[main/:?]
> at
> org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> ~[main/:?]
> at
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> ~[main/:?]
> at
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> ~[main/:?]
> at
> org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> ~[main/:?]
> at
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> ~[main/:?]
> at org.apache.solr.core.SolrCore.execute(SolrCore.java:2890) ~[main/:?]
> at org.apache.solr.util.TestHarness.query(TestHarness.java:357)
> ~[solr-test-framework-10.0.0-SNAPSHOT.jar:10.0.0-SNAPSHOT
> 04ea6dfe56c9a4c914d3dae34577433fd574cd25 [snapshot build, details omitted]]
>
> On Mon, Feb 6, 2023 at 9:43 PM Grace Sainsbury <gr...@gmail.com> wrote:
>
> > Hi Mikhail,
> >
> > I don't have an account to file a JIRA ticket.
> >
> > Grace
> >
> > On Mon, 6 Feb 2023 at 13:37, Mikhail Khludnev <mk...@apache.org> wrote:
> >
> > > Hello, Grace.
> > > It seems like a bug deserves a JIRA issue at least.
> > >
> > > On Mon, Feb 6, 2023 at 9:07 PM Grace Sainsbury <gr...@gmail.com>
> > wrote:
> > >
> > > > I have a MoreLikeThis query handler set up on my index:
> > > >
> > > > <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
> > > >     <lst name="defaults">
> > > >       <str name="echoParams">all</str>
> > > >       <int name="rows">10</int>
> > > >        <str name="mlt.fl">text</str>
> > > >     </lst>
> > > >   </requestHandler>
> > > >
> > > > If I use faceting on a query with no no tagging and exclusion
> > everything
> > > > works as expected. eg:
> > > >
> > > >
> > > >
> > >
> > /mlt?facet.field=genre&facet.mincount=1&facet=true&fq=genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{
> > > > DOCUMENT_ID}
> > > >
> > > > If I add tagging and exclusion the facet counts are not returned and I
> > > get
> > > > a null pointer exception:
> > > >
> > > >
> > > >
> > >
> > mlt?facet.field={!ex=g}genre&facet.mincount=1&facet=true&fq={!tag=g}genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{DOCUMENT_ID}
> > > >
> > > > This is the stack trace:
> > > >
> > > > java.lang.NullPointerException
> > > > > at java.base/java.util.Objects.requireNonNull(Objects.java:208)
> > > > > at
> > > > >
> > > >
> > >
> > com.github.benmanes.caffeine.cache.BoundedLocalCache.put(BoundedLocalCache.java:2196)
> > > > > at
> > > > >
> > > >
> > >
> > com.github.benmanes.caffeine.cache.BoundedLocalCache.putIfAbsent(BoundedLocalCache.java:2182)
> > > > > at
> > > > >
> > > >
> > >
> > com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:316)
> > > > > at
> > > > >
> > > >
> > >
> > com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:291)
> > > > > at
> > > > >
> > > org.apache.solr.search.CaffeineCache.computeAsync(CaffeineCache.java:209)
> > > > > at
> > > > >
> > > >
> > >
> > org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:250)
> > > > > at
> > > > >
> > > >
> > >
> > org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:970)
> > > > > at
> > > > >
> > > >
> > >
> > org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:927)
> > > > > at
> > > > >
> > > >
> > >
> > org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1192)
> > > > > at
> > > > >
> > > >
> > >
> > org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1091)
> > > > > at
> > > > >
> > > org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> > > > > at
> > > > org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> > > > > at
> > > > >
> > > >
> > >
> > org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> > > > > at
> > > > >
> > > >
> > >
> > org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> > > > > at
> > > > >
> > > >
> > >
> > org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> > > > > at
> > > > >
> > > >
> > >
> > org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> > > > > at
> > > > >
> > > >
> > >
> > org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> > > > > at org.apache.solr.core.SolrCore.execute(SolrCore.java:2865)
> > > > > at
> > org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:887)
> > > > > at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:606)
> > > > > at
> > > > >
> > > >
> > >
> > org.apache.solr.servlet.SolrDispatchFilter.dispatch(SolrDispatchFilter.java:250)
> > > > > at
> > > > >
> > > >
> > >
> > org.apache.solr.servlet.SolrDispatchFilter.lambda$doFilter$0(SolrDispatchFilter.java:218)
> > > > > at
> > > > >
> > > >
> > >
> > org.apache.solr.servlet.ServletUtils.traceHttpRequestExecution2(ServletUtils.java:257)
> > > > > at
> > > > >
> > > >
> > >
> > org.apache.solr.servlet.ServletUtils.rateLimitRequest(ServletUtils.java:227)
> > > > > at
> > > > >
> > > >
> > >
> > org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:213)
> > > > > at
> > > > >
> > > >
> > >
> > org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:195)
> > > > > at
> > > org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
> > > > > at
> > > > >
> > > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.server.handler.InetAccessHandler.handle(InetAccessHandler.java:177)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > at org.eclipse.jetty.server.Server.handle(Server.java:516)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
> > > > > at
> > org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
> > > > > at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
> > > > > at
> > > > > org.eclipse.jetty.io
> > > > .AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
> > > > > at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
> > > > > at org.eclipse.jetty.io
> > > .ChannelEndPoint$1.run(ChannelEndPoint.java:104)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
> > > > > at
> > > > >
> > > >
> > >
> > org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
> > > > > at java.base/java.lang.Thread.run(Thread.java:833)
> > > > >
> > > >
> > > > Is there an issue with my configuration?
> > > >
> > > > Thanks,
> > > > Grace
> > > >
> > >
> > >
> > > --
> > > Sincerely yours
> > > Mikhail Khludnev
> > > https://t.me/MUST_SEARCH
> > > A caveat: Cyrillic!
> > >
> >
>
>
> --
> Sincerely yours
> Mikhail Khludnev
> https://t.me/MUST_SEARCH
> A caveat: Cyrillic!

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@solr.apache.org
For additional commands, e-mail: dev-help@solr.apache.org


Re: NullPointerException when using facets in More Like This Query

Posted by Grace Sainsbury <gr...@gmail.com>.
Thanks for the quick fix! It seems to have resolved the issue.

On Tue, 7 Feb 2023 at 16:29, Mikhail Khludnev <mk...@apache.org> wrote:

> https://github.com/apache/solr/pull/1339
> Reviews are welcome.
>
> On Tue, Feb 7, 2023 at 10:54 PM Grace Sainsbury <gr...@gmail.com> wrote:
>
> > I've created a ticket for this here:
> >
> > https://issues.apache.org/jira/browse/SOLR-16648
> >
> > It only seems to affect The MoreLIkeTHis query handler, The same facet
> > setup works fine using the standard query handler.
> >
> > On Mon, 6 Feb 2023 at 15:36, Mikhail Khludnev <mk...@apache.org> wrote:
> >
> > > Devs, heads up!
> > >
> > > At first glance this failure doesn't look like mlt specific. It just
> > falls
> > > down on NPE when it has no result (null docset, ha!) in fq and then
> > > attempts to cache null. Not good, you know. I hope I'm wrong.
> > >
> > > $ git diff
> > > diff --git
> > > a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.ja
> > > va
> > >
> b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> > > index c218b08938e..bac430b12d4 100644
> > > ---
> > >
> a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> > > +++
> > >
> b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> > > @@ -246,6 +246,14 @@ public class MoreLikeThisHandlerTest extends
> > > SolrTestCaseJ4 {
> > >            "//result/doc[1]/str[@name='id'][.='45']",
> > >
> > >
> "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='name'
> > > ]/int[@name='George'][.='1']");
> > >      }
> > > +    params.set("facet.field", "{!ex=tg}name");
> > > +    params.set("fq","{!tag=tg}name:NoGeorge");
> > > +    try(SolrQueryRequest mltreq = new LocalSolrQueryRequest(core,
> > > params)){
> > > +      assertQ(
> > > +              mltreq,
> > > +              "//result/doc[1]/str[@name='id'][.='45']",
> > > +
> > >  "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='n
> > > ame']/int[@name='George'][.='1']");
> > > +    }
> > >    }
> > >
> > >    @Test
> > >
> > >
> > > java.lang.NullPointerException: null
> > > at java.util.Objects.requireNonNull(Objects.java:221) ~[?:?]
> > > at
> > >
> > >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2585)
> > > ~[caffeine-3.1.2.jar:?]
> > > at
> > >
> > >
> >
> com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:106)
> > > ~[caffeine-3.1.2.jar:?]
> > > at
> > >
> > >
> >
> com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62)
> > > ~[caffeine-3.1.2.jar:?]
> > > at
> > >
> > >
> >
> org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:254)
> > > ~[main/:?]
> > > at
> > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:972)
> > > ~[main/:?]
> > > at
> > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:928)
> > > ~[main/:?]
> > > at
> > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1186)
> > > ~[main/:?]
> > > at
> > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1097)
> > > ~[main/:?]
> > > at
> > >
> org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> > > ~[main/:?]
> > > at
> > org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> > > ~[main/:?]
> > > at
> > >
> > >
> >
> org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> > > ~[main/:?]
> > > at
> > >
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> > > ~[main/:?]
> > > at
> > >
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> > > ~[main/:?]
> > > at
> > >
> > >
> >
> org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> > > ~[main/:?]
> > > at
> > >
> > >
> >
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> > > ~[main/:?]
> > > at org.apache.solr.core.SolrCore.execute(SolrCore.java:2890) ~[main/:?]
> > > at org.apache.solr.util.TestHarness.query(TestHarness.java:357)
> > > ~[solr-test-framework-10.0.0-SNAPSHOT.jar:10.0.0-SNAPSHOT
> > > 04ea6dfe56c9a4c914d3dae34577433fd574cd25 [snapshot build, details
> > omitted]]
> > >
> > > On Mon, Feb 6, 2023 at 9:43 PM Grace Sainsbury <gr...@gmail.com>
> > wrote:
> > >
> > > > Hi Mikhail,
> > > >
> > > > I don't have an account to file a JIRA ticket.
> > > >
> > > > Grace
> > > >
> > > > On Mon, 6 Feb 2023 at 13:37, Mikhail Khludnev <mk...@apache.org>
> wrote:
> > > >
> > > > > Hello, Grace.
> > > > > It seems like a bug deserves a JIRA issue at least.
> > > > >
> > > > > On Mon, Feb 6, 2023 at 9:07 PM Grace Sainsbury <gr...@gmail.com>
> > > > wrote:
> > > > >
> > > > > > I have a MoreLikeThis query handler set up on my index:
> > > > > >
> > > > > > <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
> > > > > >     <lst name="defaults">
> > > > > >       <str name="echoParams">all</str>
> > > > > >       <int name="rows">10</int>
> > > > > >        <str name="mlt.fl">text</str>
> > > > > >     </lst>
> > > > > >   </requestHandler>
> > > > > >
> > > > > > If I use faceting on a query with no no tagging and exclusion
> > > > everything
> > > > > > works as expected. eg:
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> /mlt?facet.field=genre&facet.mincount=1&facet=true&fq=genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{
> > > > > > DOCUMENT_ID}
> > > > > >
> > > > > > If I add tagging and exclusion the facet counts are not returned
> > and
> > > I
> > > > > get
> > > > > > a null pointer exception:
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> mlt?facet.field={!ex=g}genre&facet.mincount=1&facet=true&fq={!tag=g}genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{DOCUMENT_ID}
> > > > > >
> > > > > > This is the stack trace:
> > > > > >
> > > > > > java.lang.NullPointerException
> > > > > > > at java.base/java.util.Objects.requireNonNull(Objects.java:208)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.put(BoundedLocalCache.java:2196)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.putIfAbsent(BoundedLocalCache.java:2182)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:316)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:291)
> > > > > > > at
> > > > > > >
> > > > >
> > >
> org.apache.solr.search.CaffeineCache.computeAsync(CaffeineCache.java:209)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:250)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:970)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:927)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1192)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1091)
> > > > > > > at
> > > > > > >
> > > > >
> > >
> org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> > > > > > > at
> > > > > >
> > > org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> > > > > > > at org.apache.solr.core.SolrCore.execute(SolrCore.java:2865)
> > > > > > > at
> > > > org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:887)
> > > > > > > at
> > org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:606)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.dispatch(SolrDispatchFilter.java:250)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.lambda$doFilter$0(SolrDispatchFilter.java:218)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.ServletUtils.traceHttpRequestExecution2(ServletUtils.java:257)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.ServletUtils.rateLimitRequest(ServletUtils.java:227)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:213)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:195)
> > > > > > > at
> > > > >
> > org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
> > > > > > > at
> > > > > > >
> > > > >
> > >
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.InetAccessHandler.handle(InetAccessHandler.java:177)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > > > at org.eclipse.jetty.server.Server.handle(Server.java:516)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
> > > > > > > at
> > > > org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
> > > > > > > at
> > > org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
> > > > > > > at
> > > > > > > org.eclipse.jetty.io
> > > > > >
> > > .AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
> > > > > > > at org.eclipse.jetty.io
> > > .FillInterest.fillable(FillInterest.java:105)
> > > > > > > at org.eclipse.jetty.io
> > > > > .ChannelEndPoint$1.run(ChannelEndPoint.java:104)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
> > > > > > > at java.base/java.lang.Thread.run(Thread.java:833)
> > > > > > >
> > > > > >
> > > > > > Is there an issue with my configuration?
> > > > > >
> > > > > > Thanks,
> > > > > > Grace
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Sincerely yours
> > > > > Mikhail Khludnev
> > > > > https://t.me/MUST_SEARCH
> > > > > A caveat: Cyrillic!
> > > > >
> > > >
> > >
> > >
> > > --
> > > Sincerely yours
> > > Mikhail Khludnev
> > > https://t.me/MUST_SEARCH
> > > A caveat: Cyrillic!
> > >
> >
>
>
> --
> Sincerely yours
> Mikhail Khludnev
> https://t.me/MUST_SEARCH
> A caveat: Cyrillic!
>

Re: NullPointerException when using facets in More Like This Query

Posted by Grace Sainsbury <gr...@gmail.com>.
Thanks for the quick fix! It seems to have resolved the issue.

On Tue, 7 Feb 2023 at 16:29, Mikhail Khludnev <mk...@apache.org> wrote:

> https://github.com/apache/solr/pull/1339
> Reviews are welcome.
>
> On Tue, Feb 7, 2023 at 10:54 PM Grace Sainsbury <gr...@gmail.com> wrote:
>
> > I've created a ticket for this here:
> >
> > https://issues.apache.org/jira/browse/SOLR-16648
> >
> > It only seems to affect The MoreLIkeTHis query handler, The same facet
> > setup works fine using the standard query handler.
> >
> > On Mon, 6 Feb 2023 at 15:36, Mikhail Khludnev <mk...@apache.org> wrote:
> >
> > > Devs, heads up!
> > >
> > > At first glance this failure doesn't look like mlt specific. It just
> > falls
> > > down on NPE when it has no result (null docset, ha!) in fq and then
> > > attempts to cache null. Not good, you know. I hope I'm wrong.
> > >
> > > $ git diff
> > > diff --git
> > > a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.ja
> > > va
> > >
> b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> > > index c218b08938e..bac430b12d4 100644
> > > ---
> > >
> a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> > > +++
> > >
> b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> > > @@ -246,6 +246,14 @@ public class MoreLikeThisHandlerTest extends
> > > SolrTestCaseJ4 {
> > >            "//result/doc[1]/str[@name='id'][.='45']",
> > >
> > >
> "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='name'
> > > ]/int[@name='George'][.='1']");
> > >      }
> > > +    params.set("facet.field", "{!ex=tg}name");
> > > +    params.set("fq","{!tag=tg}name:NoGeorge");
> > > +    try(SolrQueryRequest mltreq = new LocalSolrQueryRequest(core,
> > > params)){
> > > +      assertQ(
> > > +              mltreq,
> > > +              "//result/doc[1]/str[@name='id'][.='45']",
> > > +
> > >  "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='n
> > > ame']/int[@name='George'][.='1']");
> > > +    }
> > >    }
> > >
> > >    @Test
> > >
> > >
> > > java.lang.NullPointerException: null
> > > at java.util.Objects.requireNonNull(Objects.java:221) ~[?:?]
> > > at
> > >
> > >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2585)
> > > ~[caffeine-3.1.2.jar:?]
> > > at
> > >
> > >
> >
> com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:106)
> > > ~[caffeine-3.1.2.jar:?]
> > > at
> > >
> > >
> >
> com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62)
> > > ~[caffeine-3.1.2.jar:?]
> > > at
> > >
> > >
> >
> org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:254)
> > > ~[main/:?]
> > > at
> > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:972)
> > > ~[main/:?]
> > > at
> > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:928)
> > > ~[main/:?]
> > > at
> > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1186)
> > > ~[main/:?]
> > > at
> > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1097)
> > > ~[main/:?]
> > > at
> > >
> org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> > > ~[main/:?]
> > > at
> > org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> > > ~[main/:?]
> > > at
> > >
> > >
> >
> org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> > > ~[main/:?]
> > > at
> > >
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> > > ~[main/:?]
> > > at
> > >
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> > > ~[main/:?]
> > > at
> > >
> > >
> >
> org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> > > ~[main/:?]
> > > at
> > >
> > >
> >
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> > > ~[main/:?]
> > > at org.apache.solr.core.SolrCore.execute(SolrCore.java:2890) ~[main/:?]
> > > at org.apache.solr.util.TestHarness.query(TestHarness.java:357)
> > > ~[solr-test-framework-10.0.0-SNAPSHOT.jar:10.0.0-SNAPSHOT
> > > 04ea6dfe56c9a4c914d3dae34577433fd574cd25 [snapshot build, details
> > omitted]]
> > >
> > > On Mon, Feb 6, 2023 at 9:43 PM Grace Sainsbury <gr...@gmail.com>
> > wrote:
> > >
> > > > Hi Mikhail,
> > > >
> > > > I don't have an account to file a JIRA ticket.
> > > >
> > > > Grace
> > > >
> > > > On Mon, 6 Feb 2023 at 13:37, Mikhail Khludnev <mk...@apache.org>
> wrote:
> > > >
> > > > > Hello, Grace.
> > > > > It seems like a bug deserves a JIRA issue at least.
> > > > >
> > > > > On Mon, Feb 6, 2023 at 9:07 PM Grace Sainsbury <gr...@gmail.com>
> > > > wrote:
> > > > >
> > > > > > I have a MoreLikeThis query handler set up on my index:
> > > > > >
> > > > > > <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
> > > > > >     <lst name="defaults">
> > > > > >       <str name="echoParams">all</str>
> > > > > >       <int name="rows">10</int>
> > > > > >        <str name="mlt.fl">text</str>
> > > > > >     </lst>
> > > > > >   </requestHandler>
> > > > > >
> > > > > > If I use faceting on a query with no no tagging and exclusion
> > > > everything
> > > > > > works as expected. eg:
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> /mlt?facet.field=genre&facet.mincount=1&facet=true&fq=genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{
> > > > > > DOCUMENT_ID}
> > > > > >
> > > > > > If I add tagging and exclusion the facet counts are not returned
> > and
> > > I
> > > > > get
> > > > > > a null pointer exception:
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> mlt?facet.field={!ex=g}genre&facet.mincount=1&facet=true&fq={!tag=g}genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{DOCUMENT_ID}
> > > > > >
> > > > > > This is the stack trace:
> > > > > >
> > > > > > java.lang.NullPointerException
> > > > > > > at java.base/java.util.Objects.requireNonNull(Objects.java:208)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.put(BoundedLocalCache.java:2196)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.putIfAbsent(BoundedLocalCache.java:2182)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:316)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:291)
> > > > > > > at
> > > > > > >
> > > > >
> > >
> org.apache.solr.search.CaffeineCache.computeAsync(CaffeineCache.java:209)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:250)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:970)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:927)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1192)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1091)
> > > > > > > at
> > > > > > >
> > > > >
> > >
> org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> > > > > > > at
> > > > > >
> > > org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> > > > > > > at org.apache.solr.core.SolrCore.execute(SolrCore.java:2865)
> > > > > > > at
> > > > org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:887)
> > > > > > > at
> > org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:606)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.dispatch(SolrDispatchFilter.java:250)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.lambda$doFilter$0(SolrDispatchFilter.java:218)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.ServletUtils.traceHttpRequestExecution2(ServletUtils.java:257)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.ServletUtils.rateLimitRequest(ServletUtils.java:227)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:213)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:195)
> > > > > > > at
> > > > >
> > org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
> > > > > > > at
> > > > > > >
> > > > >
> > >
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.InetAccessHandler.handle(InetAccessHandler.java:177)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > > > at org.eclipse.jetty.server.Server.handle(Server.java:516)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
> > > > > > > at
> > > > org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
> > > > > > > at
> > > org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
> > > > > > > at
> > > > > > > org.eclipse.jetty.io
> > > > > >
> > > .AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
> > > > > > > at org.eclipse.jetty.io
> > > .FillInterest.fillable(FillInterest.java:105)
> > > > > > > at org.eclipse.jetty.io
> > > > > .ChannelEndPoint$1.run(ChannelEndPoint.java:104)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
> > > > > > > at
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
> > > > > > > at java.base/java.lang.Thread.run(Thread.java:833)
> > > > > > >
> > > > > >
> > > > > > Is there an issue with my configuration?
> > > > > >
> > > > > > Thanks,
> > > > > > Grace
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Sincerely yours
> > > > > Mikhail Khludnev
> > > > > https://t.me/MUST_SEARCH
> > > > > A caveat: Cyrillic!
> > > > >
> > > >
> > >
> > >
> > > --
> > > Sincerely yours
> > > Mikhail Khludnev
> > > https://t.me/MUST_SEARCH
> > > A caveat: Cyrillic!
> > >
> >
>
>
> --
> Sincerely yours
> Mikhail Khludnev
> https://t.me/MUST_SEARCH
> A caveat: Cyrillic!
>

Re: NullPointerException when using facets in More Like This Query

Posted by Mikhail Khludnev <mk...@apache.org>.
https://github.com/apache/solr/pull/1339
Reviews are welcome.

On Tue, Feb 7, 2023 at 10:54 PM Grace Sainsbury <gr...@gmail.com> wrote:

> I've created a ticket for this here:
>
> https://issues.apache.org/jira/browse/SOLR-16648
>
> It only seems to affect The MoreLIkeTHis query handler, The same facet
> setup works fine using the standard query handler.
>
> On Mon, 6 Feb 2023 at 15:36, Mikhail Khludnev <mk...@apache.org> wrote:
>
> > Devs, heads up!
> >
> > At first glance this failure doesn't look like mlt specific. It just
> falls
> > down on NPE when it has no result (null docset, ha!) in fq and then
> > attempts to cache null. Not good, you know. I hope I'm wrong.
> >
> > $ git diff
> > diff --git
> > a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.ja
> > va
> > b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> > index c218b08938e..bac430b12d4 100644
> > ---
> > a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> > +++
> > b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> > @@ -246,6 +246,14 @@ public class MoreLikeThisHandlerTest extends
> > SolrTestCaseJ4 {
> >            "//result/doc[1]/str[@name='id'][.='45']",
> >
> >  "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='name'
> > ]/int[@name='George'][.='1']");
> >      }
> > +    params.set("facet.field", "{!ex=tg}name");
> > +    params.set("fq","{!tag=tg}name:NoGeorge");
> > +    try(SolrQueryRequest mltreq = new LocalSolrQueryRequest(core,
> > params)){
> > +      assertQ(
> > +              mltreq,
> > +              "//result/doc[1]/str[@name='id'][.='45']",
> > +
> >  "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='n
> > ame']/int[@name='George'][.='1']");
> > +    }
> >    }
> >
> >    @Test
> >
> >
> > java.lang.NullPointerException: null
> > at java.util.Objects.requireNonNull(Objects.java:221) ~[?:?]
> > at
> >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2585)
> > ~[caffeine-3.1.2.jar:?]
> > at
> >
> >
> com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:106)
> > ~[caffeine-3.1.2.jar:?]
> > at
> >
> >
> com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62)
> > ~[caffeine-3.1.2.jar:?]
> > at
> >
> >
> org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:254)
> > ~[main/:?]
> > at
> >
> >
> org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:972)
> > ~[main/:?]
> > at
> >
> >
> org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:928)
> > ~[main/:?]
> > at
> >
> >
> org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1186)
> > ~[main/:?]
> > at
> >
> >
> org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1097)
> > ~[main/:?]
> > at
> > org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> > ~[main/:?]
> > at
> org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> > ~[main/:?]
> > at
> >
> >
> org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> > ~[main/:?]
> > at
> >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> > ~[main/:?]
> > at
> >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> > ~[main/:?]
> > at
> >
> >
> org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> > ~[main/:?]
> > at
> >
> >
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> > ~[main/:?]
> > at org.apache.solr.core.SolrCore.execute(SolrCore.java:2890) ~[main/:?]
> > at org.apache.solr.util.TestHarness.query(TestHarness.java:357)
> > ~[solr-test-framework-10.0.0-SNAPSHOT.jar:10.0.0-SNAPSHOT
> > 04ea6dfe56c9a4c914d3dae34577433fd574cd25 [snapshot build, details
> omitted]]
> >
> > On Mon, Feb 6, 2023 at 9:43 PM Grace Sainsbury <gr...@gmail.com>
> wrote:
> >
> > > Hi Mikhail,
> > >
> > > I don't have an account to file a JIRA ticket.
> > >
> > > Grace
> > >
> > > On Mon, 6 Feb 2023 at 13:37, Mikhail Khludnev <mk...@apache.org> wrote:
> > >
> > > > Hello, Grace.
> > > > It seems like a bug deserves a JIRA issue at least.
> > > >
> > > > On Mon, Feb 6, 2023 at 9:07 PM Grace Sainsbury <gr...@gmail.com>
> > > wrote:
> > > >
> > > > > I have a MoreLikeThis query handler set up on my index:
> > > > >
> > > > > <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
> > > > >     <lst name="defaults">
> > > > >       <str name="echoParams">all</str>
> > > > >       <int name="rows">10</int>
> > > > >        <str name="mlt.fl">text</str>
> > > > >     </lst>
> > > > >   </requestHandler>
> > > > >
> > > > > If I use faceting on a query with no no tagging and exclusion
> > > everything
> > > > > works as expected. eg:
> > > > >
> > > > >
> > > > >
> > > >
> > >
> >
> /mlt?facet.field=genre&facet.mincount=1&facet=true&fq=genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{
> > > > > DOCUMENT_ID}
> > > > >
> > > > > If I add tagging and exclusion the facet counts are not returned
> and
> > I
> > > > get
> > > > > a null pointer exception:
> > > > >
> > > > >
> > > > >
> > > >
> > >
> >
> mlt?facet.field={!ex=g}genre&facet.mincount=1&facet=true&fq={!tag=g}genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{DOCUMENT_ID}
> > > > >
> > > > > This is the stack trace:
> > > > >
> > > > > java.lang.NullPointerException
> > > > > > at java.base/java.util.Objects.requireNonNull(Objects.java:208)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.put(BoundedLocalCache.java:2196)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.putIfAbsent(BoundedLocalCache.java:2182)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:316)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:291)
> > > > > > at
> > > > > >
> > > >
> > org.apache.solr.search.CaffeineCache.computeAsync(CaffeineCache.java:209)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:250)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:970)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:927)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1192)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1091)
> > > > > > at
> > > > > >
> > > >
> > org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> > > > > > at
> > > > >
> > org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> > > > > > at org.apache.solr.core.SolrCore.execute(SolrCore.java:2865)
> > > > > > at
> > > org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:887)
> > > > > > at
> org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:606)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.dispatch(SolrDispatchFilter.java:250)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.lambda$doFilter$0(SolrDispatchFilter.java:218)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.ServletUtils.traceHttpRequestExecution2(ServletUtils.java:257)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.ServletUtils.rateLimitRequest(ServletUtils.java:227)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:213)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:195)
> > > > > > at
> > > >
> org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
> > > > > > at
> > > > > >
> > > >
> > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.InetAccessHandler.handle(InetAccessHandler.java:177)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > > at org.eclipse.jetty.server.Server.handle(Server.java:516)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
> > > > > > at
> > > org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
> > > > > > at
> > org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
> > > > > > at
> > > > > > org.eclipse.jetty.io
> > > > >
> > .AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
> > > > > > at org.eclipse.jetty.io
> > .FillInterest.fillable(FillInterest.java:105)
> > > > > > at org.eclipse.jetty.io
> > > > .ChannelEndPoint$1.run(ChannelEndPoint.java:104)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
> > > > > > at java.base/java.lang.Thread.run(Thread.java:833)
> > > > > >
> > > > >
> > > > > Is there an issue with my configuration?
> > > > >
> > > > > Thanks,
> > > > > Grace
> > > > >
> > > >
> > > >
> > > > --
> > > > Sincerely yours
> > > > Mikhail Khludnev
> > > > https://t.me/MUST_SEARCH
> > > > A caveat: Cyrillic!
> > > >
> > >
> >
> >
> > --
> > Sincerely yours
> > Mikhail Khludnev
> > https://t.me/MUST_SEARCH
> > A caveat: Cyrillic!
> >
>


-- 
Sincerely yours
Mikhail Khludnev
https://t.me/MUST_SEARCH
A caveat: Cyrillic!

Re: NullPointerException when using facets in More Like This Query

Posted by Mikhail Khludnev <mk...@apache.org>.
https://github.com/apache/solr/pull/1339
Reviews are welcome.

On Tue, Feb 7, 2023 at 10:54 PM Grace Sainsbury <gr...@gmail.com> wrote:

> I've created a ticket for this here:
>
> https://issues.apache.org/jira/browse/SOLR-16648
>
> It only seems to affect The MoreLIkeTHis query handler, The same facet
> setup works fine using the standard query handler.
>
> On Mon, 6 Feb 2023 at 15:36, Mikhail Khludnev <mk...@apache.org> wrote:
>
> > Devs, heads up!
> >
> > At first glance this failure doesn't look like mlt specific. It just
> falls
> > down on NPE when it has no result (null docset, ha!) in fq and then
> > attempts to cache null. Not good, you know. I hope I'm wrong.
> >
> > $ git diff
> > diff --git
> > a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.ja
> > va
> > b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> > index c218b08938e..bac430b12d4 100644
> > ---
> > a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> > +++
> > b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> > @@ -246,6 +246,14 @@ public class MoreLikeThisHandlerTest extends
> > SolrTestCaseJ4 {
> >            "//result/doc[1]/str[@name='id'][.='45']",
> >
> >  "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='name'
> > ]/int[@name='George'][.='1']");
> >      }
> > +    params.set("facet.field", "{!ex=tg}name");
> > +    params.set("fq","{!tag=tg}name:NoGeorge");
> > +    try(SolrQueryRequest mltreq = new LocalSolrQueryRequest(core,
> > params)){
> > +      assertQ(
> > +              mltreq,
> > +              "//result/doc[1]/str[@name='id'][.='45']",
> > +
> >  "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='n
> > ame']/int[@name='George'][.='1']");
> > +    }
> >    }
> >
> >    @Test
> >
> >
> > java.lang.NullPointerException: null
> > at java.util.Objects.requireNonNull(Objects.java:221) ~[?:?]
> > at
> >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2585)
> > ~[caffeine-3.1.2.jar:?]
> > at
> >
> >
> com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:106)
> > ~[caffeine-3.1.2.jar:?]
> > at
> >
> >
> com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62)
> > ~[caffeine-3.1.2.jar:?]
> > at
> >
> >
> org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:254)
> > ~[main/:?]
> > at
> >
> >
> org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:972)
> > ~[main/:?]
> > at
> >
> >
> org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:928)
> > ~[main/:?]
> > at
> >
> >
> org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1186)
> > ~[main/:?]
> > at
> >
> >
> org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1097)
> > ~[main/:?]
> > at
> > org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> > ~[main/:?]
> > at
> org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> > ~[main/:?]
> > at
> >
> >
> org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> > ~[main/:?]
> > at
> >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> > ~[main/:?]
> > at
> >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> > ~[main/:?]
> > at
> >
> >
> org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> > ~[main/:?]
> > at
> >
> >
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> > ~[main/:?]
> > at org.apache.solr.core.SolrCore.execute(SolrCore.java:2890) ~[main/:?]
> > at org.apache.solr.util.TestHarness.query(TestHarness.java:357)
> > ~[solr-test-framework-10.0.0-SNAPSHOT.jar:10.0.0-SNAPSHOT
> > 04ea6dfe56c9a4c914d3dae34577433fd574cd25 [snapshot build, details
> omitted]]
> >
> > On Mon, Feb 6, 2023 at 9:43 PM Grace Sainsbury <gr...@gmail.com>
> wrote:
> >
> > > Hi Mikhail,
> > >
> > > I don't have an account to file a JIRA ticket.
> > >
> > > Grace
> > >
> > > On Mon, 6 Feb 2023 at 13:37, Mikhail Khludnev <mk...@apache.org> wrote:
> > >
> > > > Hello, Grace.
> > > > It seems like a bug deserves a JIRA issue at least.
> > > >
> > > > On Mon, Feb 6, 2023 at 9:07 PM Grace Sainsbury <gr...@gmail.com>
> > > wrote:
> > > >
> > > > > I have a MoreLikeThis query handler set up on my index:
> > > > >
> > > > > <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
> > > > >     <lst name="defaults">
> > > > >       <str name="echoParams">all</str>
> > > > >       <int name="rows">10</int>
> > > > >        <str name="mlt.fl">text</str>
> > > > >     </lst>
> > > > >   </requestHandler>
> > > > >
> > > > > If I use faceting on a query with no no tagging and exclusion
> > > everything
> > > > > works as expected. eg:
> > > > >
> > > > >
> > > > >
> > > >
> > >
> >
> /mlt?facet.field=genre&facet.mincount=1&facet=true&fq=genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{
> > > > > DOCUMENT_ID}
> > > > >
> > > > > If I add tagging and exclusion the facet counts are not returned
> and
> > I
> > > > get
> > > > > a null pointer exception:
> > > > >
> > > > >
> > > > >
> > > >
> > >
> >
> mlt?facet.field={!ex=g}genre&facet.mincount=1&facet=true&fq={!tag=g}genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{DOCUMENT_ID}
> > > > >
> > > > > This is the stack trace:
> > > > >
> > > > > java.lang.NullPointerException
> > > > > > at java.base/java.util.Objects.requireNonNull(Objects.java:208)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.put(BoundedLocalCache.java:2196)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.putIfAbsent(BoundedLocalCache.java:2182)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:316)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:291)
> > > > > > at
> > > > > >
> > > >
> > org.apache.solr.search.CaffeineCache.computeAsync(CaffeineCache.java:209)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:250)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:970)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:927)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1192)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1091)
> > > > > > at
> > > > > >
> > > >
> > org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> > > > > > at
> > > > >
> > org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> > > > > > at org.apache.solr.core.SolrCore.execute(SolrCore.java:2865)
> > > > > > at
> > > org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:887)
> > > > > > at
> org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:606)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.dispatch(SolrDispatchFilter.java:250)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.lambda$doFilter$0(SolrDispatchFilter.java:218)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.ServletUtils.traceHttpRequestExecution2(ServletUtils.java:257)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.ServletUtils.rateLimitRequest(ServletUtils.java:227)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:213)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:195)
> > > > > > at
> > > >
> org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
> > > > > > at
> > > > > >
> > > >
> > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.InetAccessHandler.handle(InetAccessHandler.java:177)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > > at org.eclipse.jetty.server.Server.handle(Server.java:516)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
> > > > > > at
> > > org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
> > > > > > at
> > org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
> > > > > > at
> > > > > > org.eclipse.jetty.io
> > > > >
> > .AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
> > > > > > at org.eclipse.jetty.io
> > .FillInterest.fillable(FillInterest.java:105)
> > > > > > at org.eclipse.jetty.io
> > > > .ChannelEndPoint$1.run(ChannelEndPoint.java:104)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
> > > > > > at
> > > > > >
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
> > > > > > at java.base/java.lang.Thread.run(Thread.java:833)
> > > > > >
> > > > >
> > > > > Is there an issue with my configuration?
> > > > >
> > > > > Thanks,
> > > > > Grace
> > > > >
> > > >
> > > >
> > > > --
> > > > Sincerely yours
> > > > Mikhail Khludnev
> > > > https://t.me/MUST_SEARCH
> > > > A caveat: Cyrillic!
> > > >
> > >
> >
> >
> > --
> > Sincerely yours
> > Mikhail Khludnev
> > https://t.me/MUST_SEARCH
> > A caveat: Cyrillic!
> >
>


-- 
Sincerely yours
Mikhail Khludnev
https://t.me/MUST_SEARCH
A caveat: Cyrillic!

Re: NullPointerException when using facets in More Like This Query

Posted by Grace Sainsbury <gr...@gmail.com>.
I've created a ticket for this here:

https://issues.apache.org/jira/browse/SOLR-16648

It only seems to affect The MoreLIkeTHis query handler, The same facet
setup works fine using the standard query handler.

On Mon, 6 Feb 2023 at 15:36, Mikhail Khludnev <mk...@apache.org> wrote:

> Devs, heads up!
>
> At first glance this failure doesn't look like mlt specific. It just falls
> down on NPE when it has no result (null docset, ha!) in fq and then
> attempts to cache null. Not good, you know. I hope I'm wrong.
>
> $ git diff
> diff --git
> a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.ja
> va
> b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> index c218b08938e..bac430b12d4 100644
> ---
> a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> +++
> b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
> @@ -246,6 +246,14 @@ public class MoreLikeThisHandlerTest extends
> SolrTestCaseJ4 {
>            "//result/doc[1]/str[@name='id'][.='45']",
>
>  "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='name'
> ]/int[@name='George'][.='1']");
>      }
> +    params.set("facet.field", "{!ex=tg}name");
> +    params.set("fq","{!tag=tg}name:NoGeorge");
> +    try(SolrQueryRequest mltreq = new LocalSolrQueryRequest(core,
> params)){
> +      assertQ(
> +              mltreq,
> +              "//result/doc[1]/str[@name='id'][.='45']",
> +
>  "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='n
> ame']/int[@name='George'][.='1']");
> +    }
>    }
>
>    @Test
>
>
> java.lang.NullPointerException: null
> at java.util.Objects.requireNonNull(Objects.java:221) ~[?:?]
> at
>
> com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2585)
> ~[caffeine-3.1.2.jar:?]
> at
>
> com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:106)
> ~[caffeine-3.1.2.jar:?]
> at
>
> com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62)
> ~[caffeine-3.1.2.jar:?]
> at
>
> org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:254)
> ~[main/:?]
> at
>
> org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:972)
> ~[main/:?]
> at
>
> org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:928)
> ~[main/:?]
> at
>
> org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1186)
> ~[main/:?]
> at
>
> org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1097)
> ~[main/:?]
> at
> org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> ~[main/:?]
> at org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> ~[main/:?]
> at
>
> org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> ~[main/:?]
> at
>
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> ~[main/:?]
> at
>
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> ~[main/:?]
> at
>
> org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> ~[main/:?]
> at
>
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> ~[main/:?]
> at org.apache.solr.core.SolrCore.execute(SolrCore.java:2890) ~[main/:?]
> at org.apache.solr.util.TestHarness.query(TestHarness.java:357)
> ~[solr-test-framework-10.0.0-SNAPSHOT.jar:10.0.0-SNAPSHOT
> 04ea6dfe56c9a4c914d3dae34577433fd574cd25 [snapshot build, details omitted]]
>
> On Mon, Feb 6, 2023 at 9:43 PM Grace Sainsbury <gr...@gmail.com> wrote:
>
> > Hi Mikhail,
> >
> > I don't have an account to file a JIRA ticket.
> >
> > Grace
> >
> > On Mon, 6 Feb 2023 at 13:37, Mikhail Khludnev <mk...@apache.org> wrote:
> >
> > > Hello, Grace.
> > > It seems like a bug deserves a JIRA issue at least.
> > >
> > > On Mon, Feb 6, 2023 at 9:07 PM Grace Sainsbury <gr...@gmail.com>
> > wrote:
> > >
> > > > I have a MoreLikeThis query handler set up on my index:
> > > >
> > > > <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
> > > >     <lst name="defaults">
> > > >       <str name="echoParams">all</str>
> > > >       <int name="rows">10</int>
> > > >        <str name="mlt.fl">text</str>
> > > >     </lst>
> > > >   </requestHandler>
> > > >
> > > > If I use faceting on a query with no no tagging and exclusion
> > everything
> > > > works as expected. eg:
> > > >
> > > >
> > > >
> > >
> >
> /mlt?facet.field=genre&facet.mincount=1&facet=true&fq=genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{
> > > > DOCUMENT_ID}
> > > >
> > > > If I add tagging and exclusion the facet counts are not returned and
> I
> > > get
> > > > a null pointer exception:
> > > >
> > > >
> > > >
> > >
> >
> mlt?facet.field={!ex=g}genre&facet.mincount=1&facet=true&fq={!tag=g}genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{DOCUMENT_ID}
> > > >
> > > > This is the stack trace:
> > > >
> > > > java.lang.NullPointerException
> > > > > at java.base/java.util.Objects.requireNonNull(Objects.java:208)
> > > > > at
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.put(BoundedLocalCache.java:2196)
> > > > > at
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.putIfAbsent(BoundedLocalCache.java:2182)
> > > > > at
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:316)
> > > > > at
> > > > >
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:291)
> > > > > at
> > > > >
> > >
> org.apache.solr.search.CaffeineCache.computeAsync(CaffeineCache.java:209)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:250)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:970)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:927)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1192)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1091)
> > > > > at
> > > > >
> > >
> org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> > > > > at
> > > >
> org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> > > > > at org.apache.solr.core.SolrCore.execute(SolrCore.java:2865)
> > > > > at
> > org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:887)
> > > > > at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:606)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.dispatch(SolrDispatchFilter.java:250)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.lambda$doFilter$0(SolrDispatchFilter.java:218)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.ServletUtils.traceHttpRequestExecution2(ServletUtils.java:257)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.ServletUtils.rateLimitRequest(ServletUtils.java:227)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:213)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:195)
> > > > > at
> > > org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
> > > > > at
> > > > >
> > >
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.InetAccessHandler.handle(InetAccessHandler.java:177)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > > at org.eclipse.jetty.server.Server.handle(Server.java:516)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
> > > > > at
> > org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
> > > > > at
> org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
> > > > > at
> > > > > org.eclipse.jetty.io
> > > >
> .AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
> > > > > at org.eclipse.jetty.io
> .FillInterest.fillable(FillInterest.java:105)
> > > > > at org.eclipse.jetty.io
> > > .ChannelEndPoint$1.run(ChannelEndPoint.java:104)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
> > > > > at
> > > > >
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
> > > > > at java.base/java.lang.Thread.run(Thread.java:833)
> > > > >
> > > >
> > > > Is there an issue with my configuration?
> > > >
> > > > Thanks,
> > > > Grace
> > > >
> > >
> > >
> > > --
> > > Sincerely yours
> > > Mikhail Khludnev
> > > https://t.me/MUST_SEARCH
> > > A caveat: Cyrillic!
> > >
> >
>
>
> --
> Sincerely yours
> Mikhail Khludnev
> https://t.me/MUST_SEARCH
> A caveat: Cyrillic!
>

Re: NullPointerException when using facets in More Like This Query

Posted by Mikhail Khludnev <mk...@apache.org>.
Devs, heads up!

At first glance this failure doesn't look like mlt specific. It just falls
down on NPE when it has no result (null docset, ha!) in fq and then
attempts to cache null. Not good, you know. I hope I'm wrong.

$ git diff
diff --git
a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.ja
va b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
index c218b08938e..bac430b12d4 100644
---
a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
+++
b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
@@ -246,6 +246,14 @@ public class MoreLikeThisHandlerTest extends
SolrTestCaseJ4 {
           "//result/doc[1]/str[@name='id'][.='45']",

 "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='name'
]/int[@name='George'][.='1']");
     }
+    params.set("facet.field", "{!ex=tg}name");
+    params.set("fq","{!tag=tg}name:NoGeorge");
+    try(SolrQueryRequest mltreq = new LocalSolrQueryRequest(core, params)){
+      assertQ(
+              mltreq,
+              "//result/doc[1]/str[@name='id'][.='45']",
+
 "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='n
ame']/int[@name='George'][.='1']");
+    }
   }

   @Test


java.lang.NullPointerException: null
at java.util.Objects.requireNonNull(Objects.java:221) ~[?:?]
at
com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2585)
~[caffeine-3.1.2.jar:?]
at
com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:106)
~[caffeine-3.1.2.jar:?]
at
com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62)
~[caffeine-3.1.2.jar:?]
at
org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:254)
~[main/:?]
at
org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:972)
~[main/:?]
at
org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:928)
~[main/:?]
at
org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1186)
~[main/:?]
at
org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1097)
~[main/:?]
at
org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
~[main/:?]
at org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
~[main/:?]
at
org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
~[main/:?]
at
org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
~[main/:?]
at
org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
~[main/:?]
at
org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
~[main/:?]
at
org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
~[main/:?]
at org.apache.solr.core.SolrCore.execute(SolrCore.java:2890) ~[main/:?]
at org.apache.solr.util.TestHarness.query(TestHarness.java:357)
~[solr-test-framework-10.0.0-SNAPSHOT.jar:10.0.0-SNAPSHOT
04ea6dfe56c9a4c914d3dae34577433fd574cd25 [snapshot build, details omitted]]

On Mon, Feb 6, 2023 at 9:43 PM Grace Sainsbury <gr...@gmail.com> wrote:

> Hi Mikhail,
>
> I don't have an account to file a JIRA ticket.
>
> Grace
>
> On Mon, 6 Feb 2023 at 13:37, Mikhail Khludnev <mk...@apache.org> wrote:
>
> > Hello, Grace.
> > It seems like a bug deserves a JIRA issue at least.
> >
> > On Mon, Feb 6, 2023 at 9:07 PM Grace Sainsbury <gr...@gmail.com>
> wrote:
> >
> > > I have a MoreLikeThis query handler set up on my index:
> > >
> > > <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
> > >     <lst name="defaults">
> > >       <str name="echoParams">all</str>
> > >       <int name="rows">10</int>
> > >        <str name="mlt.fl">text</str>
> > >     </lst>
> > >   </requestHandler>
> > >
> > > If I use faceting on a query with no no tagging and exclusion
> everything
> > > works as expected. eg:
> > >
> > >
> > >
> >
> /mlt?facet.field=genre&facet.mincount=1&facet=true&fq=genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{
> > > DOCUMENT_ID}
> > >
> > > If I add tagging and exclusion the facet counts are not returned and I
> > get
> > > a null pointer exception:
> > >
> > >
> > >
> >
> mlt?facet.field={!ex=g}genre&facet.mincount=1&facet=true&fq={!tag=g}genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{DOCUMENT_ID}
> > >
> > > This is the stack trace:
> > >
> > > java.lang.NullPointerException
> > > > at java.base/java.util.Objects.requireNonNull(Objects.java:208)
> > > > at
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.put(BoundedLocalCache.java:2196)
> > > > at
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.putIfAbsent(BoundedLocalCache.java:2182)
> > > > at
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:316)
> > > > at
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:291)
> > > > at
> > > >
> > org.apache.solr.search.CaffeineCache.computeAsync(CaffeineCache.java:209)
> > > > at
> > > >
> > >
> >
> org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:250)
> > > > at
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:970)
> > > > at
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:927)
> > > > at
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1192)
> > > > at
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1091)
> > > > at
> > > >
> > org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> > > > at
> > > org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> > > > at
> > > >
> > >
> >
> org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> > > > at
> > > >
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> > > > at
> > > >
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> > > > at
> > > >
> > >
> >
> org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> > > > at
> > > >
> > >
> >
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> > > > at org.apache.solr.core.SolrCore.execute(SolrCore.java:2865)
> > > > at
> org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:887)
> > > > at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:606)
> > > > at
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.dispatch(SolrDispatchFilter.java:250)
> > > > at
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.lambda$doFilter$0(SolrDispatchFilter.java:218)
> > > > at
> > > >
> > >
> >
> org.apache.solr.servlet.ServletUtils.traceHttpRequestExecution2(ServletUtils.java:257)
> > > > at
> > > >
> > >
> >
> org.apache.solr.servlet.ServletUtils.rateLimitRequest(ServletUtils.java:227)
> > > > at
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:213)
> > > > at
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:195)
> > > > at
> > org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
> > > > at
> > > >
> > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.InetAccessHandler.handle(InetAccessHandler.java:177)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > at org.eclipse.jetty.server.Server.handle(Server.java:516)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
> > > > at
> org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
> > > > at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
> > > > at
> > > > org.eclipse.jetty.io
> > > .AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
> > > > at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
> > > > at org.eclipse.jetty.io
> > .ChannelEndPoint$1.run(ChannelEndPoint.java:104)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
> > > > at java.base/java.lang.Thread.run(Thread.java:833)
> > > >
> > >
> > > Is there an issue with my configuration?
> > >
> > > Thanks,
> > > Grace
> > >
> >
> >
> > --
> > Sincerely yours
> > Mikhail Khludnev
> > https://t.me/MUST_SEARCH
> > A caveat: Cyrillic!
> >
>


-- 
Sincerely yours
Mikhail Khludnev
https://t.me/MUST_SEARCH
A caveat: Cyrillic!

Re: NullPointerException when using facets in More Like This Query

Posted by Mikhail Khludnev <mk...@apache.org>.
Devs, heads up!

At first glance this failure doesn't look like mlt specific. It just falls
down on NPE when it has no result (null docset, ha!) in fq and then
attempts to cache null. Not good, you know. I hope I'm wrong.

$ git diff
diff --git
a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.ja
va b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
index c218b08938e..bac430b12d4 100644
---
a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
+++
b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java
@@ -246,6 +246,14 @@ public class MoreLikeThisHandlerTest extends
SolrTestCaseJ4 {
           "//result/doc[1]/str[@name='id'][.='45']",

 "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='name'
]/int[@name='George'][.='1']");
     }
+    params.set("facet.field", "{!ex=tg}name");
+    params.set("fq","{!tag=tg}name:NoGeorge");
+    try(SolrQueryRequest mltreq = new LocalSolrQueryRequest(core, params)){
+      assertQ(
+              mltreq,
+              "//result/doc[1]/str[@name='id'][.='45']",
+
 "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='n
ame']/int[@name='George'][.='1']");
+    }
   }

   @Test


java.lang.NullPointerException: null
at java.util.Objects.requireNonNull(Objects.java:221) ~[?:?]
at
com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2585)
~[caffeine-3.1.2.jar:?]
at
com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:106)
~[caffeine-3.1.2.jar:?]
at
com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62)
~[caffeine-3.1.2.jar:?]
at
org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:254)
~[main/:?]
at
org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:972)
~[main/:?]
at
org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:928)
~[main/:?]
at
org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1186)
~[main/:?]
at
org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1097)
~[main/:?]
at
org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
~[main/:?]
at org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
~[main/:?]
at
org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
~[main/:?]
at
org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
~[main/:?]
at
org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
~[main/:?]
at
org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
~[main/:?]
at
org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
~[main/:?]
at org.apache.solr.core.SolrCore.execute(SolrCore.java:2890) ~[main/:?]
at org.apache.solr.util.TestHarness.query(TestHarness.java:357)
~[solr-test-framework-10.0.0-SNAPSHOT.jar:10.0.0-SNAPSHOT
04ea6dfe56c9a4c914d3dae34577433fd574cd25 [snapshot build, details omitted]]

On Mon, Feb 6, 2023 at 9:43 PM Grace Sainsbury <gr...@gmail.com> wrote:

> Hi Mikhail,
>
> I don't have an account to file a JIRA ticket.
>
> Grace
>
> On Mon, 6 Feb 2023 at 13:37, Mikhail Khludnev <mk...@apache.org> wrote:
>
> > Hello, Grace.
> > It seems like a bug deserves a JIRA issue at least.
> >
> > On Mon, Feb 6, 2023 at 9:07 PM Grace Sainsbury <gr...@gmail.com>
> wrote:
> >
> > > I have a MoreLikeThis query handler set up on my index:
> > >
> > > <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
> > >     <lst name="defaults">
> > >       <str name="echoParams">all</str>
> > >       <int name="rows">10</int>
> > >        <str name="mlt.fl">text</str>
> > >     </lst>
> > >   </requestHandler>
> > >
> > > If I use faceting on a query with no no tagging and exclusion
> everything
> > > works as expected. eg:
> > >
> > >
> > >
> >
> /mlt?facet.field=genre&facet.mincount=1&facet=true&fq=genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{
> > > DOCUMENT_ID}
> > >
> > > If I add tagging and exclusion the facet counts are not returned and I
> > get
> > > a null pointer exception:
> > >
> > >
> > >
> >
> mlt?facet.field={!ex=g}genre&facet.mincount=1&facet=true&fq={!tag=g}genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{DOCUMENT_ID}
> > >
> > > This is the stack trace:
> > >
> > > java.lang.NullPointerException
> > > > at java.base/java.util.Objects.requireNonNull(Objects.java:208)
> > > > at
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.put(BoundedLocalCache.java:2196)
> > > > at
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.putIfAbsent(BoundedLocalCache.java:2182)
> > > > at
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:316)
> > > > at
> > > >
> > >
> >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:291)
> > > > at
> > > >
> > org.apache.solr.search.CaffeineCache.computeAsync(CaffeineCache.java:209)
> > > > at
> > > >
> > >
> >
> org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:250)
> > > > at
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:970)
> > > > at
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:927)
> > > > at
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1192)
> > > > at
> > > >
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1091)
> > > > at
> > > >
> > org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> > > > at
> > > org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> > > > at
> > > >
> > >
> >
> org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> > > > at
> > > >
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> > > > at
> > > >
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> > > > at
> > > >
> > >
> >
> org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> > > > at
> > > >
> > >
> >
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> > > > at org.apache.solr.core.SolrCore.execute(SolrCore.java:2865)
> > > > at
> org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:887)
> > > > at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:606)
> > > > at
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.dispatch(SolrDispatchFilter.java:250)
> > > > at
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.lambda$doFilter$0(SolrDispatchFilter.java:218)
> > > > at
> > > >
> > >
> >
> org.apache.solr.servlet.ServletUtils.traceHttpRequestExecution2(ServletUtils.java:257)
> > > > at
> > > >
> > >
> >
> org.apache.solr.servlet.ServletUtils.rateLimitRequest(ServletUtils.java:227)
> > > > at
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:213)
> > > > at
> > > >
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:195)
> > > > at
> > org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
> > > > at
> > > >
> > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.InetAccessHandler.handle(InetAccessHandler.java:177)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > > at org.eclipse.jetty.server.Server.handle(Server.java:516)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
> > > > at
> org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
> > > > at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
> > > > at
> > > > org.eclipse.jetty.io
> > > .AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
> > > > at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
> > > > at org.eclipse.jetty.io
> > .ChannelEndPoint$1.run(ChannelEndPoint.java:104)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
> > > > at
> > > >
> > >
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
> > > > at java.base/java.lang.Thread.run(Thread.java:833)
> > > >
> > >
> > > Is there an issue with my configuration?
> > >
> > > Thanks,
> > > Grace
> > >
> >
> >
> > --
> > Sincerely yours
> > Mikhail Khludnev
> > https://t.me/MUST_SEARCH
> > A caveat: Cyrillic!
> >
>


-- 
Sincerely yours
Mikhail Khludnev
https://t.me/MUST_SEARCH
A caveat: Cyrillic!

Re: NullPointerException when using facets in More Like This Query

Posted by Grace Sainsbury <gr...@gmail.com>.
Hi Mikhail,

I don't have an account to file a JIRA ticket.

Grace

On Mon, 6 Feb 2023 at 13:37, Mikhail Khludnev <mk...@apache.org> wrote:

> Hello, Grace.
> It seems like a bug deserves a JIRA issue at least.
>
> On Mon, Feb 6, 2023 at 9:07 PM Grace Sainsbury <gr...@gmail.com> wrote:
>
> > I have a MoreLikeThis query handler set up on my index:
> >
> > <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
> >     <lst name="defaults">
> >       <str name="echoParams">all</str>
> >       <int name="rows">10</int>
> >        <str name="mlt.fl">text</str>
> >     </lst>
> >   </requestHandler>
> >
> > If I use faceting on a query with no no tagging and exclusion everything
> > works as expected. eg:
> >
> >
> >
> /mlt?facet.field=genre&facet.mincount=1&facet=true&fq=genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{
> > DOCUMENT_ID}
> >
> > If I add tagging and exclusion the facet counts are not returned and I
> get
> > a null pointer exception:
> >
> >
> >
> mlt?facet.field={!ex=g}genre&facet.mincount=1&facet=true&fq={!tag=g}genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{DOCUMENT_ID}
> >
> > This is the stack trace:
> >
> > java.lang.NullPointerException
> > > at java.base/java.util.Objects.requireNonNull(Objects.java:208)
> > > at
> > >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.put(BoundedLocalCache.java:2196)
> > > at
> > >
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.putIfAbsent(BoundedLocalCache.java:2182)
> > > at
> > >
> >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:316)
> > > at
> > >
> >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:291)
> > > at
> > >
> org.apache.solr.search.CaffeineCache.computeAsync(CaffeineCache.java:209)
> > > at
> > >
> >
> org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:250)
> > > at
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:970)
> > > at
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:927)
> > > at
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1192)
> > > at
> > >
> >
> org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1091)
> > > at
> > >
> org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> > > at
> > org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> > > at
> > >
> >
> org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> > > at
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> > > at
> > >
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> > > at
> > >
> >
> org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> > > at
> > >
> >
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> > > at org.apache.solr.core.SolrCore.execute(SolrCore.java:2865)
> > > at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:887)
> > > at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:606)
> > > at
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.dispatch(SolrDispatchFilter.java:250)
> > > at
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.lambda$doFilter$0(SolrDispatchFilter.java:218)
> > > at
> > >
> >
> org.apache.solr.servlet.ServletUtils.traceHttpRequestExecution2(ServletUtils.java:257)
> > > at
> > >
> >
> org.apache.solr.servlet.ServletUtils.rateLimitRequest(ServletUtils.java:227)
> > > at
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:213)
> > > at
> > >
> >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:195)
> > > at
> org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
> > > at
> > >
> >
> org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
> > > at
> > >
> >
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
> > > at
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> > > at
> > >
> >
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
> > > at
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > at
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
> > > at
> > >
> >
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
> > > at
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
> > > at
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
> > > at
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
> > > at
> > >
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
> > > at
> > >
> >
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
> > > at
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
> > > at
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
> > > at
> > >
> >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> > > at
> > >
> >
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191)
> > > at
> > >
> >
> org.eclipse.jetty.server.handler.InetAccessHandler.handle(InetAccessHandler.java:177)
> > > at
> > >
> >
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
> > > at
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > at
> > >
> >
> org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
> > > at
> > >
> >
> org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772)
> > > at
> > >
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > > at org.eclipse.jetty.server.Server.handle(Server.java:516)
> > > at
> > >
> >
> org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
> > > at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
> > > at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
> > > at
> > >
> >
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
> > > at
> > > org.eclipse.jetty.io
> > .AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
> > > at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
> > > at org.eclipse.jetty.io
> .ChannelEndPoint$1.run(ChannelEndPoint.java:104)
> > > at
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
> > > at
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
> > > at
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
> > > at
> > >
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
> > > at
> > >
> >
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
> > > at
> > >
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
> > > at
> > >
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
> > > at java.base/java.lang.Thread.run(Thread.java:833)
> > >
> >
> > Is there an issue with my configuration?
> >
> > Thanks,
> > Grace
> >
>
>
> --
> Sincerely yours
> Mikhail Khludnev
> https://t.me/MUST_SEARCH
> A caveat: Cyrillic!
>

Re: NullPointerException when using facets in More Like This Query

Posted by Mikhail Khludnev <mk...@apache.org>.
Hello, Grace.
It seems like a bug deserves a JIRA issue at least.

On Mon, Feb 6, 2023 at 9:07 PM Grace Sainsbury <gr...@gmail.com> wrote:

> I have a MoreLikeThis query handler set up on my index:
>
> <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
>     <lst name="defaults">
>       <str name="echoParams">all</str>
>       <int name="rows">10</int>
>        <str name="mlt.fl">text</str>
>     </lst>
>   </requestHandler>
>
> If I use faceting on a query with no no tagging and exclusion everything
> works as expected. eg:
>
>
> /mlt?facet.field=genre&facet.mincount=1&facet=true&fq=genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{
> DOCUMENT_ID}
>
> If I add tagging and exclusion the facet counts are not returned and I get
> a null pointer exception:
>
>
> mlt?facet.field={!ex=g}genre&facet.mincount=1&facet=true&fq={!tag=g}genre:{GENRE_VALUE}&indent=true&q.op=OR&q=id:{DOCUMENT_ID}
>
> This is the stack trace:
>
> java.lang.NullPointerException
> > at java.base/java.util.Objects.requireNonNull(Objects.java:208)
> > at
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.put(BoundedLocalCache.java:2196)
> > at
> >
> com.github.benmanes.caffeine.cache.BoundedLocalCache.putIfAbsent(BoundedLocalCache.java:2182)
> > at
> >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:316)
> > at
> >
> com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.putIfAbsent(LocalAsyncCache.java:291)
> > at
> > org.apache.solr.search.CaffeineCache.computeAsync(CaffeineCache.java:209)
> > at
> >
> org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:250)
> > at
> >
> org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:970)
> > at
> >
> org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:927)
> > at
> >
> org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1192)
> > at
> >
> org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1091)
> > at
> > org.apache.solr.request.SimpleFacets.computeDocSet(SimpleFacets.java:258)
> > at
> org.apache.solr.request.SimpleFacets.parseParams(SimpleFacets.java:216)
> > at
> >
> org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:898)
> > at
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:337)
> > at
> >
> org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:299)
> > at
> >
> org.apache.solr.handler.MoreLikeThisHandler.handleRequestBody(MoreLikeThisHandler.java:223)
> > at
> >
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:224)
> > at org.apache.solr.core.SolrCore.execute(SolrCore.java:2865)
> > at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:887)
> > at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:606)
> > at
> >
> org.apache.solr.servlet.SolrDispatchFilter.dispatch(SolrDispatchFilter.java:250)
> > at
> >
> org.apache.solr.servlet.SolrDispatchFilter.lambda$doFilter$0(SolrDispatchFilter.java:218)
> > at
> >
> org.apache.solr.servlet.ServletUtils.traceHttpRequestExecution2(ServletUtils.java:257)
> > at
> >
> org.apache.solr.servlet.ServletUtils.rateLimitRequest(ServletUtils.java:227)
> > at
> >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:213)
> > at
> >
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:195)
> > at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
> > at
> >
> org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
> > at
> >
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
> > at
> >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> > at
> >
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
> > at
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > at
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
> > at
> >
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
> > at
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
> > at
> >
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
> > at
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
> > at
> > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
> > at
> >
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
> > at
> >
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
> > at
> >
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
> > at
> >
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> > at
> >
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191)
> > at
> >
> org.eclipse.jetty.server.handler.InetAccessHandler.handle(InetAccessHandler.java:177)
> > at
> >
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
> > at
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > at
> >
> org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
> > at
> >
> org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772)
> > at
> >
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> > at org.eclipse.jetty.server.Server.handle(Server.java:516)
> > at
> >
> org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
> > at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
> > at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
> > at
> >
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
> > at
> > org.eclipse.jetty.io
> .AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
> > at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
> > at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
> > at
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
> > at
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
> > at
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
> > at
> >
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
> > at
> >
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
> > at
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
> > at
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
> > at java.base/java.lang.Thread.run(Thread.java:833)
> >
>
> Is there an issue with my configuration?
>
> Thanks,
> Grace
>


-- 
Sincerely yours
Mikhail Khludnev
https://t.me/MUST_SEARCH
A caveat: Cyrillic!