Я хочу обслуживать своих пользователей самыми актуальными и лучшими результатами. Например, я награждаю записи, которые имеют большой заголовок, описание, прикрепленные фотографии и т.д. В контексте: записи - велосипедные маршруты, имеющие пункты маршрутизации (координаты) и метаданные, такие как фотографии, обзоры и т.д.
Теперь я индексировал эти записи с помощью Hibernate
, а затем я искал в индексе с помощью Lucene
в Hibernate Search
. Для оценки моих результатов я строю запросы на основе свойств документа и увеличиваю их (используя boostedTo()
) в should
BooleanJunction clause
:
bj.should(qb.range().onField("descriptionLength").above(3000).createQuery()).boostedTo(3.0f);
bj.should(qb.range().onField("views.views").above(5000).createQuery()).boostedTo(3.0f);
bj.should(qb.range().onField("nameLength").above(20).createQuery()).boostedTo(1.0f);
bj.should(qb.range().onField("picturesLength").above(0).createQuery()).boostedTo(5.0f);
bj.should(qb.keyword().onField("routePoints.poi.participant").matching("true").createQuery()).boostedTo(10.0f);
Чтобы попытаться отключить подсчет Lucene, я переопределил класс DefaultSimilarity
, установил все сравнение с оценкой 1.0f и включил его через конфигурацию Hibernate:
public class IgnoreScoringSimilarity extends DefaultSimilarity {
@Override
public float idf(long docFreq, long numDocs) {
return 1.0f;
}
@Override
public float tf(float freq) {
return 1.0f;
}
@Override
public float coord(int overlap, int maxOverlap) {
return 1.0f;
}
@Override
public float lengthNorm(FieldInvertState state) {
return 1.0f;
}
@Override
public float queryNorm(float sumOfSquaredWeights) {
return 1.0f;
}
}
Конфигурация спящего режима:
<property name="hibernate.search.default.similarity" value="com.search.IgnoreScoringSimilarity"/>
Этот подход работает в 90% случаев, однако я все еще вижу некоторые странные результаты, которые кажутся неуместными. Я признаю, что эти маршруты (документы) очень большие по размеру. Обычный маршрут имеет около 20-30 маршрутных точек, однако эти результаты вне места имеют 100-150. Это оставляет мне поверить, что по умолчанию показатель Lucene по-прежнему происходит (оценка выше из-за размера документа).
Неужели я делаю что-то не так, чтобы отключить счет Lucene? Может ли быть другое объяснение?