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());
}
}
}