【问题标题】:postings nextPosition returns nul, freq returns 0, payload() returns null帖子 nextPosition 返回 nul,freq 返回 0,payload() 返回 null
【发布时间】:2023-03-15 12:54:01
【问题描述】:

我使用 LuceneTestCase 为一个文档创建了最简单的索引。我的目标是将数字写入每个术语的每个位置的有效载荷,这将用于自定义查询/评分器中实现的自定义评分公式。

我使用 SimpleTextCodec 并检查过,频率、位置和有效负载确实已写入索引。

但是当我从 PostingEnum 读取频率时它返回 0,payload() 返回 null,nextPosition() 抛出异常:

  java.lang.AssertionError: got line=field model

  at __randomizedtesting.SeedInfo.seed([D334C9D1B5C155E3:2AAE4BE5481F4C8F]:0)
  at
       org.apache.lucene.codecs.simpletext.SimpleTextFieldsReader$SimpleTextPostings  Enum.nextPosition(SimpleTextFieldsReader.java:455)

这是我在自定义查询中阅读帖子的方式:

for (String field: fieldScores.keySet()) {
final Terms fieldTerms = reader.terms(field);
if (fieldTerms == null) {
    continue;
}

if (!fieldTerms.hasPositions())
    throw new IllegalStateException("Index does not contain positions");

if (!fieldTerms.hasPayloads())
    throw new IllegalStateException("Index does not contain payloads");

final TermsEnum te = fieldTerms.iterator();
for (int j = 0; j < terms.length; j++) {
    final Term t = terms[j];

    if (t.field().equals(field) && te.seekExact(t.bytes())) {
        PostingsEnum postingsEnum = te.postings(null, PostingsEnum.ALL);

        int pos = postingsEnum.nextPosition();
        BytesRef payload = postingsEnum.getPayload();
        // assert payload.bytesEquals(new BytesRef(new byte[]{1}));

        // TODO: use payload in scoring formula
        fldScorers.add(new ConstTermScorer(this, t,
                fieldScores.get(field) * termScores.get(t.text()),
 postingsEnum));
        }
   }
 }

【问题讨论】:

    标签: lucene payload


    【解决方案1】:

    我找到了原因。 nextPosition()、freq() 和 payload() 返回 0(或 null)值,因为 postsEnum(迭代器)刚刚创建,尚未定位在具体文档上。未调用 postsEnum.nextDoc() 且 postsEnum.docID() 为 -1。愚蠢的情况,但如果 nextPosition()、freq() 和 payload() 会检查 postsEnum.docID 会更好。

    【讨论】:

      猜你喜欢
      • 2020-04-27
      • 1970-01-01
      • 2020-01-28
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      相关资源
      最近更新 更多