【问题标题】:Lucene payload scoringLucene 有效载荷评分
【发布时间】:2011-09-23 12:12:58
【问题描述】:

我想弄清楚有效载荷评分在 lucene 中的工作原理。由于我不明白 PayloadFunction 适合的位置,我想我并不真正了解它是如何工作的。尝试用谷歌搜索它,但除了建议通过源代码之外找不到太多。好吧,如果有人可以在这里解释它会很好,否则它是源代码:)

【问题讨论】:

    标签: lucene payload


    【解决方案1】:

    它分为三个部分。首先,您应该在分析期间生成有效载荷。这可以使用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-10-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 2023-01-05
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多