On a previous version of a solr snapshot we had a custom component which did the following
boolean fsv = req.getParams().getBool(ResponseBuilder.FIELD_SORT_VALUES,false); if(fsv){ NamedList sortVals = (NamedList) rsp.getValues().get("sort_values"); if(sortVals != null){ Sort sort = searcher.weightSort(rb.getSortSpec().getSort()); SortField[] sortFields = sort==null ? new SortField[]{SortField.FIELD_SCORE} : sort.getSort(); for (SortField sortField: sortFields) { String fieldname = sortField.getField(); if(sortVals.get(fieldname) == null) continue; ArrayList<Object> list = (ArrayList<Object>) sortVals.get(fieldname); list.removeAll(filteredDocs); } } } where filteredDocs is an ArrayList of integers containing the documents to remove from sort vals. On the current solr on trunk sortVals is now an Object[]. I had tried to update by I had thought that doing the following would provide the same result, but alas it does not. Am I missing something that should be happening here? boolean fsv = req.getParams().getBool(ResponseBuilder.FIELD_SORT_VALUES,false); if(fsv){ NamedList sortVals = (NamedList) rsp.getValues().get("sort_values"); if(sortVals != null){ Sort sort = searcher.weightSort(rb.getSortSpec().getSort()); SortField[] sortFields = sort==null ? new SortField[]{SortField.FIELD_SCORE} : sort.getSort(); for (SortField sortField: sortFields) { String fieldname = sortField.getField(); if(sortVals.get(fieldname) == null) continue; Object[] sortValue = (Object[])sortVals.get(fieldname); List<Object> sortValueList = new ArrayList<Object>(sortValue.length); sortValueList.removeAll(filteredDocs); sortVals.remove(fieldname); sortVals.add(fieldname, sortValueList.toArray()); } } }