1

ペイロード スコアリングが lucene でどのように機能するかを知りたいです。PayloadFunction がどこに収まるか分からないので、仕組みがよく分からないのだと思います。グーグルで検索してみましたが、ソースを調べるためのアドバイス以外にはあまり見つかりませんでした。誰かがここで説明できればいいのですが、それ以外の場合はソースコードです:)

4

1 に答える 1

3

それには3つの部分があります。まず、分析中にペイロードを生成する必要があります。これは、 を使用して実行できます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ドキュメントのペイロード スコアを集計して、最終的なドキュメント スコアを生成することができます。

于 2011-06-27T22:11:04.837 に答える