1
我想弄清楚如何在lucene中使用有效載荷評分。由於我不明白PayloadFunction在哪裏適合,我想我不太瞭解它是如何工作的。試圖用Google進行搜索,但找不到通過源代碼的建議。那麼,如果有人能夠在這裏解釋它會很好,否則源代碼是:)Lucene負載評分
我想弄清楚如何在lucene中使用有效載荷評分。由於我不明白PayloadFunction在哪裏適合,我想我不太瞭解它是如何工作的。試圖用Google進行搜索,但找不到通過源代碼的建議。那麼,如果有人能夠在這裏解釋它會很好,否則源代碼是:)Lucene負載評分
它有三個部分。首先,您應該在分析過程中生成有效載荷。這可以使用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
你可以在文檔聚集有效載荷的分數產生最終的文件得分。