2011-03-21 18 views
8
Ben 0 ve

Lucene puanları nasıl normalleştirilir?

Örneğin, rastgele bir sorgu aşağıdaki puanları döndürür 1 arasında Lucene puanları normalleştirmek için gereken

...

8.864665 
2.792687 
2.792687 
2.792687 
2.792687 
0.49009037 
0.33730242 
0.33730242 
0.33730242 
0.33730242 

büyük skor nedir

? 10.0?

sayesinde

cevap

8

Sen

0 ile 1. puanları almak için maksimum skoru tüm puanları bölebilirsiniz Ayrıca bkz yalnızca sorgu. 2 farklı sorgudan elde edilen sonuçların (normalize edilmiş veya edilmemiş) sonuçlarını karşılaştırmak doğru değildir.

+0

@ nikhil500 gerçekten? Yani, bir sürü sorgum varsa, hangisinin daha iyi performans gösterdiğini nasıl görebilirim? – aneuryzm

+0

Lütfen birden fazla sorgunun sonuçlarını nasıl (ve neden) karşılaştırmak istediğinize dair daha fazla ayrıntı gönderin. Sorgulardaki puanlar doğrudan karşılaştırılamaz, ancak kesin sorununuza bağlı olarak, bir çözüm bulabiliriz. – nikhil500

+0

@ nikhil500 Sorunum, her sorgu için birden fazla puan (diğer yazılımlardan geliyor) birleştirmek zorunda ve hepsi Lucene puanları hariç (0 ile 1 arasında) normalleştirildi. – aneuryzm

5

Lucene puanları normalleştirmek için iyi bir standart bir yolu yoktur. Bunu okuyun: ScoresAsPercentages ve bu explanation

Sizin durumunuzda, sonuçlar en skor olarak sıralanırsa, en yüksek skor ilk sonucun skorudur. Ancak bu puan, diğer her sorgu için farklı olacaktır.

Ancak, normalize puanlar tek sonuçlarını karşılaştırmak için kullanılması gerektiğini lütfen unutmayın how-do-i-normalise-a-solr-lucene-score

+0

Sorunum, her sorgu sonucu için lümen puanları + diğer puanları (Lucene'le ilgili değil) var. Diğer skorlar 1 ile 0 arasında normalleştirilir. Eğer Lucene skorlarını normalleştirmezsem aynı şekilde dengesiz sonuçlara ulaşacağım ... – aneuryzm

+0

http://lucene.apache.org/java /2_9_2/api/core/org/apache/lucene/search/Collector.html sınıfı. Kendi Toplayıcınızı yazmanız gerekebilir. Belki diğer puanlarınızı veya bir kombinasyonunuzu kullanarak. – morja

1

Solr'da maksimum puan yoktur, çok fazla değişkene bağlıdır, bu nedenle tahmin edilemez.

Ama normalleştirilmiş puan (Scores As Percentages) adlı bir öğeyi uygulayamazsınız.

fazla ayrıntı için

bakınız ilgili bağlantılar:

Is it possible to set a Solr Score threshold 'reasonably', independent of results returned? (i.e. Is Solr Scoring standardized in any way)

how do I normalise a solr/lucene score?

Remove results below a certain score threshold in Solr/Lucene?

0

Düzenli normalleşme sadece sorguları arasında puanlama dağılımını karşılaştırmak için yardımcı olacaktır (ve onların listeleri alınır) . Sorguların arasındaki performansı karşılaştırmak için skoru basitleştiremezsiniz. Tüm alınan belgelerin yüksek derecede alakalı olduğunu ve aynı (yüksek puan) aldığını ve başka bir sorguda, alınan listenin arpa ile ilgili belge içerdiğini (yine aynı puanla) içeren bir sorguyu düşünün - artık, sorgu başına ne olursa olsun yaptığınız normalleştirme - normalleştirilmiş puan aynı olacaktır.

Tüm puanları aynı seviyeye getirebilen bir çapraz sorgulama faktörü üzerinde düşünmeniz gerekir. Örneğin

- belki belge skor

0

İki veya daha fazla sorgu karşılaştırmak isterseniz birlikte bir türlü skor sorgu ve bütün endeks ve kullanımı arasındaki benzerliği hesaplama i bir geçici çözüm bulundu. Sorgulayıcınız ile sonucunuz arasındaki mesafeyi almak için LevenstheinDistance veya LuceneLevenstheinDistance (Damerau) sınıfı kullanarak en yüksek puanlı belgenizi sorgulayıcınızla karşılaştırabilirsiniz. Sonuç, aralarındaki benzerliktir. Karşılaşmak istediğiniz her sorgu için bunu yapın. Şimdi, sorgularınızı ve en yüksek sonucunuzun çeşitliliğini kullanarak sorgularınızı karşılaştırmak için bir aracınız var.Artık sorguyu en yüksek eşleme puanıyla seçebilir ve bunu bir sonraki uygun işlemler için kullanabilirsiniz.

//Damerau LevenstheinDistance 
    LuceneLevenshteinDistance d = new LuceneLevenshteinDistance(); 

    similiarity = d.getDistance(queryterm, yourResult);