2012-06-15 1 views
0

Я хочу, чтобы вычислить среднюю длину документа для сбора документов, которые каждый документ, имеющий 3 различных полей (filed1, field2, field3)Расчет средней длины документа с Lucene

Это программа для расчета средней длины, когда только одно поле там.

private byte[] normsDocLengthArr = null; 
private double avgDocLength; 
normsDocLengthArr = indexReader.norms("filed1"); 
      //norms-Returns the byte-encoded normalization factor for the named field of every document. 
double sumLength = 0; 

for (int i = 0; i < normsDocLengthArr.length; i++) { 
    double encodeLength = DefaultSimilarity.decodeNorm(normsDocLengthArr[i]); 
    //decodeNorm -Decodes a normalization factor stored in an index. 
    double length = 1/(encodeLength * encodeLength); 

    sumLength += length; 

} 

this.avgDocLength = sumLength/normsDocLengthArr.length; 

Вот как я продлил его для всех трех полей.

private byte[] normsDocLengthArrField1 = null; 
private byte[] normsDocLengthArrField2 = null; 
private byte[] normsDocLengthArrField3 = null; 
private double avgDocLength; 

normsDocLengthArrField1 = indexReader.norms("filed1"); 
normsDocLengthArrField2 = indexReader.norms("filed2"); 
normsDocLengthArrField3 = indexReader.norms("filed3"); 
      //norms-Returns the byte-encoded normalization factor for the named field of every document. 
double sumLength = 0; 

for (int i = 0; i < normsDocLengthArrField1.length; i++) { 
    double encodeLengthF1 = DefaultSimilarity.decodeNorm(normsDocLengthArrField1[i]); 
    double encodeLengthF2 = DefaultSimilarity.decodeNorm(normsDocLengthArrField2[i]); 
    double encodeLengthF3 = DefaultSimilarity.decodeNorm(normsDocLengthArrField3[i]); 

    //decodeNorm -Decodes a normalization factor stored in an index. 
    double length = 1/{(encodeLengthF1 * encodeLengthF1)+(encodeLengthF2 * encodeLengthF2)+(encodeLengthF3 * encodeLengthF3)}; 

    sumLength += length; 

} 

this.avgDocLength = sumLength/(normsDocLengthArrField1.length+ normsDocLengthArrField2.length+normsDocLengthArrField3.length; 

Я просто хочу знать, правильна ли моя реализация вычисления средней длины Doc для 3-х полей?

ответ

0

Я нашел этот путь как правильный способ вычисления средней длины документа, в котором документ имеет 3 поля с lucene.

byte[] normsDocLengthArrField1 = indexReader.norms("filed1"); 
byte[] normsDocLengthArrField2 = indexReader.norms("filed2"); 
byte[] normsDocLengthArrField3 = indexReader.norms("filed3"); 

double sumLength = 0; 
     for (int i = 0; i < normsDocLengthArrField1.length; i++) { 
      double encodeLengthFOne = DefaultSimilarity.decodeNorm(normsDocLengthArrField1[i]); 
      double encodeLengthFTwo = DefaultSimilarity.decodeNorm(normsDocLengthArrField2[i]); 
      double encodeLengthFThree = DefaultSimilarity.decodeNorm(normsDocLengthArrField3[i]); 

     //decodeNorm -Decodes a normalization factor stored in an index. 
     double lengthFieldOne = 1/(encodeLengthFOne * encodeLengthFOne); 
     double lengthFieldTwo = 1/(encodeLengthFTwo * encodeLengthFTwo); 
     double lengthFieldThree = 1/(encodeLengthFThree * encodeLengthFThree); 
     sumLength += lengthFieldOne + lengthFieldTwo + lengthFieldThree; 

    } 
    this.avgDocLength = sumLength/(normsDocLengthArrField1.length); 

 Смежные вопросы

  • Нет связанных вопросов^_^