Solr arama sonuçlarının skorlamasını nasıl geliştirebileceğimi araştırmaya çalışıyorum. Uygulamamın sonuçları solr sonuçlarından alması ve sonucun ne kadar iyi olduğuna bağlı olarak birkaç yıldız göstermesi gerekiyor. 5 Yıldızlı = neredeyse/tam olarak 0 yıldıza kadar, aramayı çok iyi eşleştirmeyecek şekilde, yani, sadece bir eleman vurur. Ancak, 1,4'ten 0.8660254'e kadar olan skorları aldığımda, her ikisine de 5 yıldız vereceğim sonuçlar geliyor. Yapmam gereken şey, bu sonuçları bir sayıya çevirmektir, böylece bu sonuçları doğru yıldız sayısıyla işaretleyebilirim.Bir solr/lucene skorunu nasıl normalleştiririm?
Bu da beni 1.4 puan verir çalıştırmak sorgu:
euallowed: true VE (dereceli: "2: 1")
bana 0,8660254 puan veren sorgu:
euallowed: true vE (dereceli: "2: 1" VEYA sınıf: "1") böylece zaten Benzerlik güncelledik
tf ve idf dönüş 1.0 Ben sadece interes olduğum gibi Belgede bir terim varsa, belgede o terimin sayısını değil. nasıl çok “
nasıl skor normale en iyi yolunu bulmaya çalışabilir, böylece:
import org.apache.lucene.search.Similarity; public class StudentSearchSimilarity extends Similarity { @Override public float lengthNorm(String fieldName, int numTerms) { return (float) (1.0/Math.sqrt(numTerms)); } @Override public float queryNorm(float sumOfSquaredWeights) { return (float) (1.0/Math.sqrt(sumOfSquaredWeights)); } @Override public float sloppyFreq(int distance) { return 1.0f/(distance + 1); } @Override public float tf(float freq) { return (float) 1.0; } @Override public float idf(int docFreq, int numDocs) { //return (float) (Math.log(numDocs/(double) (docFreq + 1)) + 1.0); return (float)1.0; } @Override public float coord(int overlap, int maxOverlap) { return overlap/(float) maxOverlap; } }
Yani benim sorular burada varsayalım: Bu benim benzerlik kod neye benzediği yıldız vermek?
sonuçlarını puanlamak için başka bir yolu var mı?
Teşekkür
Grant
Humm ... teşekkürler. Bu çok iyi bir argüman ama tf ve IDF geçersiz ne olur emin değilim yapar. Buna farklı bir şekilde bakmam gerektiğini düşünüyorum. Yıldızlar tarafından "puanlama" anlamına gelmese bile. –