You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Hoss Man (JIRA)" <ji...@apache.org> on 2018/06/12 22:15:00 UTC

[jira] [Commented] (SOLR-12457) field(x,min|max) sorting doesn't work on trie or str fields in multi-shard collections

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

Hoss Man commented on SOLR-12457:
---------------------------------

bq. ... so StrField's marshalSortValue & unmarshalSortValue methods (which handle the BytesRef/String conversion) take care of things for you.

FWIW: i started second guessing myself as to *why* I was seeing the implicit syntax work for str fields, because in both cases the {{SortField}} should be identical {{SortedSetSortField}} instances with the field name set on them -- but then i realized {{QueryComponent.unmarshalSortValues}} uses {{SortSpec.getSchemaFields()}} to decide which {{SortFields}} should be unmarshalled -- and _that_ knows the difference between a {{SortField}} whose {{String getField()}} might happen to match a schema field name, vs an actual usage of sorting on a {{SchemaField}} (which is important for field aliasing, etc...)

> field(x,min|max) sorting doesn't work on trie or str fields in multi-shard collections
> --------------------------------------------------------------------------------------
>
>                 Key: SOLR-12457
>                 URL: https://issues.apache.org/jira/browse/SOLR-12457
>             Project: Solr
>          Issue Type: Bug
>      Security Level: Public(Default Security Level. Issues are Public) 
>    Affects Versions: 7.1
>            Reporter: Varun Thacker
>            Priority: Major
>
> When I go to sort on a multi-valued field in a 2 shard collection, which has trie fields the query fails.
> To reproduce we need 2+ shards, a multi-valued trie field and "desc" sort criteria.
> Here's my schema
> {code:java}
> <dynamicField name="*_is" type="int" indexed="true" stored="true" multiValued="true" docValues="true"/>
> <fieldType class="solr.TrieIntField" docValues="true" name="int" positionIncrementGap="0" precisionStep="0"/>
> <dynamicField name="*_i" type="pint" indexed="true" stored="true" multiValued="true"/>
> <fieldType name="pint" class="solr.IntPointField" docValues="true"/>
> {code}
> Now If I add a few docs
> {code:java}
> [
> {"id" : "1", "test_is" : ["1", "2", "3", "4", "5"], "test_i" : ["1", "2", "3", "4", "5"]},
> {"id" : "2", "test_is" : ["1", "2", "3", "4", "5"], "test_i" : ["1", "2", "3", "4", "5"]},
> {"id" : "3", "test_is" : ["1", "2", "3", "4", "5"], "test_i" : ["1", "2", "3", "4", "5"]}
> ]{code}
> Works:
> [http://localhost:8983/solr/gettingstarted/select?q=*:*&sort=field(test_i,max)%20desc]
>  
> Doesn't Work:
> [http://localhost:8983/solr/gettingstarted/select?q=*:*&sort=field(test_is,max)%20desc]
>  
> To be more clear when I say it doesn't work , the query throws and error and here's the stack trace for it:
> {code:java}
> ERROR - 2018-06-06 22:55:06.599; [c:gettingstarted s:shard2 r:core_node8 x:gettingstarted_shard2_replica_n5] org.apache.solr.common.SolrException; null:java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.lucene.util.BytesRef
>         at org.apache.lucene.search.FieldComparator$TermOrdValComparator.compareValues(FieldComparator.java:561)
>         at org.apache.solr.handler.component.ShardFieldSortedHitQueue$1.compare(ShardFieldSortedHitQueue.java:161)
>         at org.apache.solr.handler.component.ShardFieldSortedHitQueue$1.compare(ShardFieldSortedHitQueue.java:153)
>         at org.apache.solr.handler.component.ShardFieldSortedHitQueue.lessThan(ShardFieldSortedHitQueue.java:91)
>         at org.apache.solr.handler.component.ShardFieldSortedHitQueue.lessThan(ShardFieldSortedHitQueue.java:33)
>         at org.apache.lucene.util.PriorityQueue.upHeap(PriorityQueue.java:263)
>         at org.apache.lucene.util.PriorityQueue.add(PriorityQueue.java:140)
>         at org.apache.lucene.util.PriorityQueue.insertWithOverflow(PriorityQueue.java:156)
>         at org.apache.solr.handler.component.QueryComponent.mergeIds(QueryComponent.java:924)
>         at org.apache.solr.handler.component.QueryComponent.handleRegularResponses(QueryComponent.java:585)
>         at org.apache.solr.handler.component.QueryComponent.handleResponses(QueryComponent.java:564)
>         at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:423)
>         at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:177)
>         at org.apache.solr.core.SolrCore.execute(SolrCore.java:2484)
>         at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:720)
>         at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:526){code}
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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