You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@solr.apache.org by Mikhail Khludnev <mk...@apache.org> on 2023/02/06 20:34:36 UTC
Re: NullPointerException when using facets in More Like This Query
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 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!
>