int fieldIndexToSemanticDistance(int j,int zeroJ) {
        if (j == -1) return -1;
        int firstSegmentLength = Math.min(parameters.getProximityLimit(), field.terms().size() - zeroJ);
        int secondSegmentLength = Math.min(parameters.getProximityLimit(), zeroJ);
        if (j >= zeroJ) {
            if ( (j - zeroJ) < firstSegmentLength )
                return j - zeroJ; // 0..limit
            else
                return j - zeroJ+secondSegmentLength; // limit*2..field.length-zeroJ
        }
        else {
            if ( (zeroJ - j - 1) < secondSegmentLength )
                return zeroJ - j + firstSegmentLength-1; // limit..limit*2
            else
                return (zeroJ - j - 1) + field.terms().size() - zeroJ; // field.length-zeroJ..
        }

    }
Returns the semantic distance from a starting point zeroJ to a field index j

@return the semantic distance, or -1 (undefined) if j is -1
searchlib/src/main/java/com/yahoo/searchlib/ranking/features/fieldmatch/FieldMatchMetricsComputer.java