lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Judith Silverman (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (SOLR-6203) cast exception while searching with sort function and result grouping
Date Sat, 03 Dec 2016 00:10:58 GMT

    [ https://issues.apache.org/jira/browse/SOLR-6203?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15716678#comment-15716678
] 

Judith Silverman edited comment on SOLR-6203 at 12/3/16 12:09 AM:
------------------------------------------------------------------

Hi, yes, that does indeed make sense, not that I have a clear idea of what "weighting of sort"
does.  And on that topic:

I've had more time this week to work on this jira than I will have in the foreseeable future,
so I'm forging ahead rather than sensibly waiting for your comments.  I started calling new
utility functions that make use of SortSpec's SchemaFields, but my updated unit tests kept
failing with the same old "java.lang.Double cannot be cast to org.apache.lucene.util.BytesRef"
error, and I got to wondering about the call to schema.getFileOrNull() in the new implWeightSortSpec()
function from the SOLR-9660 patch.  That function allows the dynamic '*' field to lay claim
to schema fields which SortSpecParsing carefully protected from it, just as it does when called
by the XXXResultTransformer functions we are gearing up to modify.

I have only the vaguest understanding of what the weightSort()/rewrite()/createWeight() functions
are all about.  Do they actually affect which SchemaField a SortField should be associated
to?  I tweaked implWeightSortSpec() to leave SchemaFields alone except in the case that nullEquivalent
kicks in, and all unit tests (including new ones testing the use of the new utility functions)
now pass.  For now, I'm posting a patch to our branch containing just the tweak to implWSS()
and a little cleanup (removing my questions and your replies).      
                                                                                         
                               
Have a good weekend yourself!  Thanks,
Judith


was (Author: judith):
Hi, yes, that does indeed make sense, not that I have a clear idea of what "weighting of sort"
does.  And on that topic:

I've had more time this week to work on this jira than I will have in the foreseeable future,
so I'm forging ahead rather than sensibly waiting for your comments.  I started calling new
utility functions that make use of SortSpec's SchemaFields, but my updated unit tests kept
failing with the same old "java.lang.Double cannot be cast to org.apache.lucene.util.BytesRef"
error, and I got to wondering about the call to schema.getFileOrNull() in the new implWeightSortSpec()
function from the SOLR-9660 patch.  It seems to me to be allowing the dynamic '*' field to
lay claim to schema fields which SortSpecParsing carefully protected from it.

I have only the vaguest understanding of what weightSort()/rewrite()/
createWeight() functions are all about.  Do they actually affect which SchemaField a SortField
should be associated to?  I tweaked implWeightSortSpec() to leave SchemaFields alone except
in the case      that nullEquivalent kicks in, and all tests now pass.  I'll post a patch
to our branch containing just that change and a little cleanup  (removing my questions and
your replies).                
                                                                                         
                               
Have a good weekend yourself!  Thanks,
Judith

> cast exception while searching with sort function and result grouping
> ---------------------------------------------------------------------
>
>                 Key: SOLR-6203
>                 URL: https://issues.apache.org/jira/browse/SOLR-6203
>             Project: Solr
>          Issue Type: Bug
>          Components: search
>    Affects Versions: 4.7, 4.8
>            Reporter: Nate Dire
>            Assignee: Christine Poerschke
>         Attachments: README, SOLR-6203-unittest.patch, SOLR-6203-unittest.patch, SOLR-6203.patch,
SOLR-6203.patch, SOLR-6203.patch, SOLR-6203.patch, SOLR-6203.patch
>
>
> After upgrading from 4.5.1 to 4.7+, a schema including a {{"*"}} dynamic field as text
gets a cast exception when using a sort function and result grouping.  
> Repro (with example config):
> # Add {{"*"}} dynamic field as a {{TextField}}, eg:
> {noformat}
> <dynamicField name="*" type="text_general" multiValued="true" />
> {noformat}
> #  Create  sharded collection
> {noformat}
> curl 'http://localhost:8983/solr/admin/collections?action=CREATE&name=test&numShards=2&maxShardsPerNode=2'
> {noformat}
> # Add example docs (query must have some results)
> # Submit query which sorts on a function result and uses result grouping:
> {noformat}
> {
>   "responseHeader": {
>     "status": 500,
>     "QTime": 50,
>     "params": {
>       "sort": "sqrt(popularity) desc",
>       "indent": "true",
>       "q": "*:*",
>       "_": "1403709010008",
>       "group.field": "manu",
>       "group": "true",
>       "wt": "json"
>     }
>   },
>   "error": {
>     "msg": "java.lang.Double cannot be cast to org.apache.lucene.util.BytesRef",
>     "code": 500
>   }
> }
> {noformat}
> Source exception from log:
> {noformat}
> ERROR - 2014-06-25 08:10:10.055; org.apache.solr.common.SolrException; java.lang.ClassCastException:
java.lang.Double cannot be cast to org.apache.lucene.util.BytesRef
>     at org.apache.solr.schema.FieldType.marshalStringSortValue(FieldType.java:981)
>     at org.apache.solr.schema.TextField.marshalSortValue(TextField.java:176)
>     at org.apache.solr.search.grouping.distributed.shardresultserializer.SearchGroupsResultTransformer.serializeSearchGroup(SearchGroupsResultTransformer.java:125)
>     at org.apache.solr.search.grouping.distributed.shardresultserializer.SearchGroupsResultTransformer.transform(SearchGroupsResultTransformer.java:65)
>     at org.apache.solr.search.grouping.distributed.shardresultserializer.SearchGroupsResultTransformer.transform(SearchGroupsResultTransformer.java:43)
>     at org.apache.solr.search.grouping.CommandHandler.processResult(CommandHandler.java:193)
>     at org.apache.solr.handler.component.QueryComponent.process(QueryComponent.java:340)
>     at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:218)
>     at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
>   ...
> {noformat}
> It looks like {{serializeSearchGroup}} is matching the sort expression as the {{"*"}}
dynamic field, which is a TextField in the repro.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

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


Mime
View raw message