Есть три его части. Прежде всего, вы должны генерировать полезные данные во время анализа. Это можно сделать с помощью PayloadAttribute
. Вам просто нужно добавить этот атрибут в термины, которые вы хотите во время анализа.
class MyFilter extends TokenFilter {
private PayloadAttribute attr;
public MyFilter() {
attr = addAttribute(PayloadAttribute.class);
}
public final boolean incrementToken() throws IOException {
if (input.incrementToken()) {
Payload p = new Payload(PayloadHelper.encodeFloat(42));
attr.setPayload(p);
} else {
attr.setPayload(null);
}
}
Тогда при поиске следует использовать специальный класс запросов PayloadTermQuery
. Этот класс ведет себя как SpanTermQuery
, но отслеживает полезные данные в индексе. Используя пользовательскую реализацию Similarity
, вы можете оценить каждое вхождение полезной нагрузки в документе.
public class MySimilarity extends DefaultSimilarity {
public float scorePayload(int docID, String fieldName,
int start, int end, byte[] payload,
int offset, int length) {
if (payload != null) {
return PayloadHelper.decodeFloat(payload, offset);
} else {
return 1.0f;
}
}
}
Наконец, используя PayloadFunction
, вы можете агрегировать оценки полезной нагрузки по документу для получения окончательной оценки документа.