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

Reply via email to