Я пытаюсь выяснить, как улучшить оценку результатов поиска solr. Моему приложению нужно взять оценку из результатов solr и отобразить несколько "звезд" в зависимости от того, насколько хорошими являются результаты запроса. 5 звезд = почти/точное до 0 звезд, что означает, что поиск не очень хорошо подходит, например. удаляется только один элемент. Однако я получаю оценки от 1.4 до 0.8660254, оба возвращают результаты, которые я бы дал 5 звезд. То, что мне нужно сделать, это как-то превратить эти результаты в процент, чтобы я мог отметить эти результаты с правильным количеством звезд.
Запрос, который я запускаю, дает мне оценку 1.4:
euallowed: true AND (оценка: "2: 1" )
Запрос, который дает мне оценку 0.8660254:
euallowed: true AND (оценка: "2: 1" ИЛИ оценка: "1-й" )
Я уже обновил сходство, так что tf и idf возвращают 1.0, поскольку меня интересует только то, что документ имеет термин, а не номер этого термина в документе. Вот как выглядит мой код сходства:
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;
}
}
Итак, я полагаю, мои вопросы:
-
Как наилучший способ нормализации оценка, чтобы я мог понять, как многие "звезды", чтобы дать?
-
Есть ли другой способ забить результаты?
Спасибо
Грант