2012-12-18 35 views
0

我想在Solr中禁用lengthNorm。有人建議使用omitNorms = true。但我無法使用它,因爲我也想做索引時間提升。 「omitNorms = true」似乎禁用索引時間提升。 我在網上找到的另一種方法是重寫DefaultSimilarty中的lengthNorm方法。但看起來這種方法不再用於Solr 4.0。還有其他的方式嗎?禁用lengthNorm(長度標準化)

public float lengthNorm(String fieldName, int numTerms) { 
    return numTerms > 0 ? 1.0f : 0.0f; 
} 

回答

1

可以檢查DefaultSimilarity源爲4.0

@Override 
public void computeNorm(FieldInvertState state, Norm norm) { 
    final int numTerms; 
    if (discountOverlaps) 
     numTerms = state.getLength() - state.getNumOverlap(); 
    else 
     numTerms = state.getLength(); 
    norm.setByte(encodeNormValue(state.getBoost() * ((float) (1.0/Math.sqrt(numTerms))))); 
} 

可以創建與numTerms等於1的自定義類或刪除計算((float) (1.0/Math.sqrt(numTerms)))消除lengthNorm效果。