Testing Lucene/Solr测试不一致内偏移

Testing Lucene/Solr测试不一致内偏移,testing,solr,lucene,tokenize,Testing,Solr,Lucene,Tokenize,我正在使用BaseTokenStreamTestCase执行一些测试。。。针对自定义令牌筛选器 考试以一种莫名其妙的方式失败了。 您可以从我的调试输出中看到,它所抱怨的令牌具有17 不一致的endOffset 1 pos=1 posLen=1 token=hello应为:但为: 以下是测试代码: assertAnalyzesTo(analyzer, input, new String[] {"wheel chair", "hello", "there", "foo bar"},

我正在使用BaseTokenStreamTestCase执行一些测试。。。针对自定义令牌筛选器

考试以一种莫名其妙的方式失败了。 您可以从我的调试输出中看到,它所抱怨的令牌具有
17

不一致的endOffset 1 pos=1 posLen=1 token=hello应为:但为:

以下是测试代码:

assertAnalyzesTo(analyzer, input,
        new String[] {"wheel chair", "hello", "there", "foo bar"},
        new int[] {0, 12, 18, 24},  // start offsets
        new int[] {11, 17, 23, 31}, // end offsets
        null,                       // types
        new int[] {1, 1, 1, 1},     // positionIncrement
        new int[] {2, 1, 1, 2});    // positionLength

为什么它认为第二个令牌应该在
11
结束?

BaseTokenStreamTestCase正在从以下来源生成错误: ... 近248号线

  final int endPos = pos + posLength;

  if (!posToEndOffset.containsKey(endPos)) {
    // First time we've seen a token arriving to this position:
    posToEndOffset.put(endPos, endOffset);
    //System.out.println("  + e " + endPos + " -> " + endOffset);
  } else {
    // We've seen a token arriving to this position
    // before; verify the endOffset is the same:
    //System.out.println("  + ve " + endPos + " -> " + endOffset);
    assertEquals("inconsistent endOffset " + i + " pos=" + pos + " posLen=" + posLength + " token=" + termAtt, posToEndOffset.get(endPos).intValue(), endOffset);
  }
由于endPos计算为
pos+posLength
,因此测试假设
posToEndOffset.get(endPos)
将返回当前令牌位置+长度的结束位置偏移量

这意味着其预读1个标记,因为第一个标记的长度为2
这就是测试失败的原因。长度使用不当

长度属性保留为其默认值1,以更正测试错误

  final int endPos = pos + posLength;

  if (!posToEndOffset.containsKey(endPos)) {
    // First time we've seen a token arriving to this position:
    posToEndOffset.put(endPos, endOffset);
    //System.out.println("  + e " + endPos + " -> " + endOffset);
  } else {
    // We've seen a token arriving to this position
    // before; verify the endOffset is the same:
    //System.out.println("  + ve " + endPos + " -> " + endOffset);
    assertEquals("inconsistent endOffset " + i + " pos=" + pos + " posLen=" + posLength + " token=" + termAtt, posToEndOffset.get(endPos).intValue(), endOffset);
  }