You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by Dawn <li...@live.com> on 2020/12/02 02:35:42 UTC

java.lang.IllegalArgumentException: Comparison method violates its general contract

hello:

jdk11 solr8.7.0
org.apache.solr.common.SolrException: java.lang.IllegalArgumentException: Comparison method violates its general contract

QueryRescorer line 114
Comparator<ScoreDoc> sortDocComparator = new Comparator<ScoreDoc>() {
  @Override
  public int compare(ScoreDoc a, ScoreDoc b) {
    // Sort by score descending, then docID ascending:
    if (a.score > b.score) {
      return -1;
    } else if (a.score < b.score) {
      return 1;
    } else {
      // This subtraction can't overflow int
      // because docIDs are >= 0:
      return a.doc - b.doc;
    }
  }
};


After 1.7, the Collections.sort() method needs to return the result of 0.
Do I have to change this to -Float.compare(a.score, b.score)

Without adding JVM parameters: -Djava.util.Arrays.useLegacyMergeSort=true