在索引时,我提升了一小部分文档的别名字段,将提升设置为 2.0f,我认为这相当于将这个文档比另一个文档的得分提高一倍,其他一切都相同。
public class ArtistBoostDoc {
//Double the score of this doc if it comes up in search
private static float ARTIST_DOC_BOOST = 2.0f;
private static Set<String> artistGuIdSet = new HashSet<String>();
static {
artistGuIdSet.add("24f1766e-9635-4d58-a4d4-9413f9f98a4c"); //Bach
artistGuIdSet.add("1f9df192-a621-4f54-8850-2c5373b7eac9"); //Beethoven
artistGuIdSet.add("b972f589-fb0e-474e-b64a-803b0364fa75"); //Mozart
artistGuIdSet.add("ad79836d-9849-44df-8789-180bbc823f3c"); //Vivaldi
artistGuIdSet.add("27870d47-bb98-42d1-bf2b-c7e972e6befc"); //Handel
artistGuIdSet.add("8255db36-4902-4cf6-8612-0f2b4288bc9a"); //Johann Strauss II
artistGuIdSet.add("eefd7c1e-abcf-4ccc-ba60-0fd435c9061f"); //Richard Wagner
artistGuIdSet.add("4e60a56a-514a-4a19-a3cc-49927c96b3cb"); //Sir Edward Elgar
artistGuIdSet.add("c130b0fb-5dce-449d-9f40-1437f889f7fe"); //Joseph Haydn
artistGuIdSet.add("f91e3a88-24ee-4563-8963-fab73d2765ed"); //Franz Schubert
artistGuIdSet.add("c70d12a2-24fe-4f83-a6e6-57d84f8efb51"); //Johannes Brahms
artistGuIdSet.add("f1bedf1f-4445-4651-9c35-f4a3f3860a13"); //Guiseppe Verdi
}
public static void boost(String artistGuid, MbDocument doc) {
boost(artistGuid,doc.getLuceneDocument());
}
public static void boost(String artistGuid, Document doc) {
if(artistGuIdSet.contains(artistGuid)) {
for(IndexableField indexablefield:doc.getFields())
{
if(indexablefield.name().equals(ArtistIndexField.ALIAS.getName()))
{
Field field = (Field)indexablefield;
field.setBoost(ARTIST_DOC_BOOST);
}
}
}
}
}
但是当我运行这个查询时:
http://search.musicbrainz.org/?type=artist&query=Jean&explain=true
您可以看到第一个文档(被索引提升)的 fieldnorm 为 7.5161928 E9(注意 E),而下一个结果为 1.0。基本上,只要这些增强文档中的一个在其别名字段上匹配,它将始终是第一个结果,一旦结果标准化,它将获得 100 分,而所有其他结果的得分为零。
如果我删除了提升,那么事情会按预期工作(但问题是我需要对这些文件进行某种提升,但现在没有)
http://search.beta.musicbrainz.org/?type=artist&query=Jean&explain=true
为什么将字段提升到 2.0 会产生如此显着的效果