[ 
https://issues.apache.org/jira/browse/SOLR-14662?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Marc Linden updated SOLR-14662:
-------------------------------
    Description: 
When performing a distributed search with multiple shards having elevation 
configured where one ore more shards do have elevated results but others do not 
a NullPointerException is thrown.

We are using Solr 8.2 and have the QueryElevationComponent configured with 
"last-components" of the default search handler "/select". But the problem also 
occurs when using the explicit "/elevate" search handler.
{code:xml}
  <requestHandler name="/select" class="solr.SearchHandler">
        ...
        <arr name="last-components">
          <str>elevator</str>
        </arr> 
  </requestHandler>
  ...
  <searchComponent name="elevator" class="solr.QueryElevationComponent" >
        <!-- pick a fieldType to analyze queries -->
        <str name="queryFieldType">string</str>
        <str name="config-file">elevate.xml</str>
  </searchComponent>
{code}
h3. Steps to reproduce:
 (1) Add entries to the elevate.xml of each core to elevate a specific document 
for the text "elevatedTerm
{code:xml}
core1:
  <elevate>
    ...
    <query text="elevatedTerm"><doc id="core1docId1" /></query>
  </elevate>
core2:
  <elevate>
    ...
    <query text="elevatedTerm"><doc id="core2docId1" /></query>
  </elevate>
{code}

 (2) Execute query (we use port 9983)
{noformat}
http://localhost:9983/solr/core1/select?q=elevatedTerm&lowercaseOperators=false&df=text_en&defType=edismax&fq=lang:en&shards=localhost:9983/solr/core1,localhost:9983/solr/core2&fl=[elevated],[shard],area,id&rows=10&start=0
{noformat}
 As both shards have elevated documents for the requested "elevatedTerm" the 
search results are as expected:
{noformat}
response: {
  numFound: 5192,
  start: 0,
  maxScore: 1.9032197,
  docs: [{
    area: "press",
    id: "core1docId1",
    [elevated]: true,
    [shard]: "localhost:9983/solr/core1"
  }, {
    area: "products",
    id: "core2docId1",
    [elevated]: true,
    [shard]: "localhost:9983/solr/core2"
  }, {
    area: "press",
    id: "core1docId2",
    [elevated]: false,
    [shard]: "localhost:9983/solr/core1"
  },
  ...
{noformat}

 (3) Remove the elevation entry for that "elevatedTerm" from one of the cores, 
e.g. via comment
{code:xml}
core2:
  <elevate>
    ...
    <!--
    <query text="elevatedTerm"><doc id="core2docId1" /></query>
    -->
  </elevate>
{code}

(4) Reload the modified core: 
[http://localhost:9983/solr/admin/cores?action=RELOAD&core=core2]

(5) Request same query again and you get the NPE:
{noformat}
error: {
  trace: "java.lang.NullPointerException
         at 
org.apache.solr.handler.component.QueryComponent.unmarshalSortValues(QueryComponent.java:1068)
         at 
org.apache.solr.handler.component.QueryComponent.mergeIds(QueryComponent.java:917)
         at 
org.apache.solr.handler.component.QueryComponent.handleRegularResponses(QueryComponent.java:613)
         at 
org.apache.solr.handler.component.QueryComponent.handleResponses(QueryComponent.java:592)
         at 
org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:431)
         at 
org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:199)
         at org.apache.solr.core.SolrCore.execute(SolrCore.java:2578)
         at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:780)
         at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:566)
         at 
org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:423)
         at 
org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:350)
         at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1602)
         at 
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:540)
         ...
{noformat}

When adding the {{sort}} parameter with {{forceElevation=true}} to the query 
then a ClassCastException is thrown
{noformat}
http://localhost:9983/solr/core1/select?q=elevatedTerm&lowercaseOperators=false&df=text_en&defType=edismax&fq=lang:en&shards=localhost:9983/solr/core1,localhost:9983/solr/core2&fl=[elevated],[shard],area,id&rows=10&start=0&sort=area%20asc&forceElevation=true{noformat}
{noformat}
java.lang.ClassCastException: java.lang.Integer cannot be cast to 
java.lang.String
  at 
org.apache.solr.schema.FieldType.unmarshalStringSortValue(FieldType.java:1229)
  at org.apache.solr.schema.StrField.unmarshalSortValue(StrField.java:122)
  at 
org.apache.solr.handler.component.QueryComponent.unmarshalSortValues(QueryComponent.java:1092)
  at 
org.apache.solr.handler.component.QueryComponent.mergeIds(QueryComponent.java:917)
  at 
org.apache.solr.handler.component.QueryComponent.handleRegularResponses(QueryComponent.java:613)
  at 
org.apache.solr.handler.component.QueryComponent.handleResponses(QueryComponent.java:592)
  at 
org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:431)
  at 
org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:199)
  at org.apache.solr.core.SolrCore.execute(SolrCore.java:2578)
  at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:780)
  ...
{noformat}

  was:
When performing a distributed search with multiple shards having elevation 
configured where one ore more shards do have elevated results but others do not 
a NullPointerException is thrown.

We are using Solr 8.2 and have the QueryElevationComponent configured with 
"last-components" of the default search handler "/select". But the problem also 
occurs when using the explicit "/elevate" search handler.
{code:xml}
  <requestHandler name="/select" class="solr.SearchHandler">
        ...
        <arr name="last-components">
          <str>elevator</str>
        </arr> 
  </requestHandler>
  ...
  <searchComponent name="elevator" class="solr.QueryElevationComponent" >
        <!-- pick a fieldType to analyze queries -->
        <str name="queryFieldType">string</str>
        <str name="config-file">elevate.xml</str>
  </searchComponent>
{code}
h3. Steps to reproduce:
 # Add entries to the elevate.xml of each core to elevate a specific document 
for the text "elevatedTerm
{code:xml}
core1:
  <elevate>
    ...
    <query text="elevatedTerm"><doc id="core1docId1" /></query>
  </elevate>
core2:
  <elevate>
    ...
    <query text="elevatedTerm"><doc id="core2docId1" /></query>
  </elevate>
{code}

 # Execute query (we use port 9983)
{noformat}
http://localhost:9983/solr/core1/select?q=elevatedTerm&lowercaseOperators=false&df=text_en&defType=edismax&fq=lang:en&shards=localhost:9983/solr/core1,localhost:9983/solr/core2&fl=[elevated],[shard],area,id&rows=10&start=0
{noformat}
 As both shards have elevated documents for the requested "elevatedTerm" the 
search results are as expected:
{noformat}
response: {
  numFound: 5192,
  start: 0,
  maxScore: 1.9032197,
  docs: [{
    area: "press",
    id: "core1docId1",
    [elevated]: true,
    [shard]: "localhost:9983/solr/core1"
  }, {
    area: "products",
    id: "core2docId1",
    [elevated]: true,
    [shard]: "localhost:9983/solr/core2"
  }, {
    area: "press",
    id: "core1docId2",
    [elevated]: false,
    [shard]: "localhost:9983/solr/core1"
  },
  ...
{noformat}

 # Remove the elevation entry for that "elevatedTerm" from one of the cores, 
e.g. via comment
{code:xml}
core2:
  <elevate>
    ...
    <!--
    <query text="elevatedTerm"><doc id="core2docId1" /></query>
    -->
  </elevate>
{code}

 # Reload the modified core: 
[http://localhost:9983/solr/admin/cores?action=RELOAD&core=core2]
 # Request same query again and you get the NPE:
{noformat}
error: {
  trace: "java.lang.NullPointerException
         at 
org.apache.solr.handler.component.QueryComponent.unmarshalSortValues(QueryComponent.java:1068)
         at 
org.apache.solr.handler.component.QueryComponent.mergeIds(QueryComponent.java:917)
         at 
org.apache.solr.handler.component.QueryComponent.handleRegularResponses(QueryComponent.java:613)
         at 
org.apache.solr.handler.component.QueryComponent.handleResponses(QueryComponent.java:592)
         at 
org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:431)
         at 
org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:199)
         at org.apache.solr.core.SolrCore.execute(SolrCore.java:2578)
         at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:780)
         at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:566)
         at 
org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:423)
         at 
org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:350)
         at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1602)
         at 
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:540)
         ...
{noformat}

When adding the {{sort}} parameter with {{forceElevation=true}} to the query 
then a ClassCastException is thrown
{noformat}
http://localhost:9983/solr/core1/select?q=elevatedTerm&lowercaseOperators=false&df=text_en&defType=edismax&fq=lang:en&shards=localhost:9983/solr/core1,localhost:9983/solr/core2&fl=[elevated],[shard],area,id&rows=10&start=0&sort=area%20asc&forceElevation=true{noformat}
{noformat}
java.lang.ClassCastException: java.lang.Integer cannot be cast to 
java.lang.String
  at 
org.apache.solr.schema.FieldType.unmarshalStringSortValue(FieldType.java:1229)
  at org.apache.solr.schema.StrField.unmarshalSortValue(StrField.java:122)
  at 
org.apache.solr.handler.component.QueryComponent.unmarshalSortValues(QueryComponent.java:1092)
  at 
org.apache.solr.handler.component.QueryComponent.mergeIds(QueryComponent.java:917)
  at 
org.apache.solr.handler.component.QueryComponent.handleRegularResponses(QueryComponent.java:613)
  at 
org.apache.solr.handler.component.QueryComponent.handleResponses(QueryComponent.java:592)
  at 
org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:431)
  at 
org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:199)
  at org.apache.solr.core.SolrCore.execute(SolrCore.java:2578)
  at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:780)
  ...
{noformat}


> Elevation with distributed search causes NPE
> --------------------------------------------
>
>                 Key: SOLR-14662
>                 URL: https://issues.apache.org/jira/browse/SOLR-14662
>             Project: Solr
>          Issue Type: Bug
>      Security Level: Public(Default Security Level. Issues are Public) 
>    Affects Versions: 8.2
>            Reporter: Marc Linden
>            Priority: Major
>              Labels: distributed_search, elevation
>
> When performing a distributed search with multiple shards having elevation 
> configured where one ore more shards do have elevated results but others do 
> not a NullPointerException is thrown.
> We are using Solr 8.2 and have the QueryElevationComponent configured with 
> "last-components" of the default search handler "/select". But the problem 
> also occurs when using the explicit "/elevate" search handler.
> {code:xml}
>   <requestHandler name="/select" class="solr.SearchHandler">
>       ...
>       <arr name="last-components">
>         <str>elevator</str>
>       </arr> 
>   </requestHandler>
>   ...
>   <searchComponent name="elevator" class="solr.QueryElevationComponent" >
>       <!-- pick a fieldType to analyze queries -->
>       <str name="queryFieldType">string</str>
>       <str name="config-file">elevate.xml</str>
>   </searchComponent>
> {code}
> h3. Steps to reproduce:
>  (1) Add entries to the elevate.xml of each core to elevate a specific 
> document for the text "elevatedTerm
> {code:xml}
> core1:
>   <elevate>
>     ...
>     <query text="elevatedTerm"><doc id="core1docId1" /></query>
>   </elevate>
> core2:
>   <elevate>
>     ...
>     <query text="elevatedTerm"><doc id="core2docId1" /></query>
>   </elevate>
> {code}
>  (2) Execute query (we use port 9983)
> {noformat}
> http://localhost:9983/solr/core1/select?q=elevatedTerm&lowercaseOperators=false&df=text_en&defType=edismax&fq=lang:en&shards=localhost:9983/solr/core1,localhost:9983/solr/core2&fl=[elevated],[shard],area,id&rows=10&start=0
> {noformat}
>  As both shards have elevated documents for the requested "elevatedTerm" the 
> search results are as expected:
> {noformat}
> response: {
>   numFound: 5192,
>   start: 0,
>   maxScore: 1.9032197,
>   docs: [{
>     area: "press",
>     id: "core1docId1",
>     [elevated]: true,
>     [shard]: "localhost:9983/solr/core1"
>   }, {
>     area: "products",
>     id: "core2docId1",
>     [elevated]: true,
>     [shard]: "localhost:9983/solr/core2"
>   }, {
>     area: "press",
>     id: "core1docId2",
>     [elevated]: false,
>     [shard]: "localhost:9983/solr/core1"
>   },
>   ...
> {noformat}
>  (3) Remove the elevation entry for that "elevatedTerm" from one of the 
> cores, e.g. via comment
> {code:xml}
> core2:
>   <elevate>
>     ...
>     <!--
>     <query text="elevatedTerm"><doc id="core2docId1" /></query>
>     -->
>   </elevate>
> {code}
> (4) Reload the modified core: 
> [http://localhost:9983/solr/admin/cores?action=RELOAD&core=core2]
> (5) Request same query again and you get the NPE:
> {noformat}
> error: {
>   trace: "java.lang.NullPointerException
>          at 
> org.apache.solr.handler.component.QueryComponent.unmarshalSortValues(QueryComponent.java:1068)
>          at 
> org.apache.solr.handler.component.QueryComponent.mergeIds(QueryComponent.java:917)
>          at 
> org.apache.solr.handler.component.QueryComponent.handleRegularResponses(QueryComponent.java:613)
>          at 
> org.apache.solr.handler.component.QueryComponent.handleResponses(QueryComponent.java:592)
>          at 
> org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:431)
>          at 
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:199)
>          at org.apache.solr.core.SolrCore.execute(SolrCore.java:2578)
>          at 
> org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:780)
>          at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:566)
>          at 
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:423)
>          at 
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:350)
>          at 
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1602)
>          at 
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:540)
>          ...
> {noformat}
> When adding the {{sort}} parameter with {{forceElevation=true}} to the query 
> then a ClassCastException is thrown
> {noformat}
> http://localhost:9983/solr/core1/select?q=elevatedTerm&lowercaseOperators=false&df=text_en&defType=edismax&fq=lang:en&shards=localhost:9983/solr/core1,localhost:9983/solr/core2&fl=[elevated],[shard],area,id&rows=10&start=0&sort=area%20asc&forceElevation=true{noformat}
> {noformat}
> java.lang.ClassCastException: java.lang.Integer cannot be cast to 
> java.lang.String
>   at 
> org.apache.solr.schema.FieldType.unmarshalStringSortValue(FieldType.java:1229)
>   at org.apache.solr.schema.StrField.unmarshalSortValue(StrField.java:122)
>   at 
> org.apache.solr.handler.component.QueryComponent.unmarshalSortValues(QueryComponent.java:1092)
>   at 
> org.apache.solr.handler.component.QueryComponent.mergeIds(QueryComponent.java:917)
>   at 
> org.apache.solr.handler.component.QueryComponent.handleRegularResponses(QueryComponent.java:613)
>   at 
> org.apache.solr.handler.component.QueryComponent.handleResponses(QueryComponent.java:592)
>   at 
> org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:431)
>   at 
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:199)
>   at org.apache.solr.core.SolrCore.execute(SolrCore.java:2578)
>   at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:780)
>   ...
> {noformat}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org
For additional commands, e-mail: issues-h...@lucene.apache.org

Reply via email to