[ 
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-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to