mirror of
https://github.com/apache/lucene.git
synced 2025-02-28 05:19:17 +00:00
LUCENE-3111: multiple outputs for the empty string should always be merged by the outputs impl
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1104453 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
fc85939864
commit
85f38eb661
@ -200,6 +200,7 @@ public class VariableGapTermsIndexWriter extends TermsIndexWriterBase {
|
||||
private class FSTFieldWriter extends FieldWriter {
|
||||
private final Builder<Long> fstBuilder;
|
||||
private final PositiveIntOutputs fstOutputs;
|
||||
private final long startTermsFilePointer;
|
||||
|
||||
final FieldInfo fieldInfo;
|
||||
int numIndexTerms;
|
||||
@ -220,6 +221,7 @@ public class VariableGapTermsIndexWriter extends TermsIndexWriterBase {
|
||||
|
||||
// Always put empty string in
|
||||
fstBuilder.add(new BytesRef(), fstOutputs.get(termsFilePointer));
|
||||
startTermsFilePointer = termsFilePointer;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -239,6 +241,11 @@ public class VariableGapTermsIndexWriter extends TermsIndexWriterBase {
|
||||
|
||||
@Override
|
||||
public void add(BytesRef text, TermStats stats, long termsFilePointer) throws IOException {
|
||||
if (text.length == 0) {
|
||||
// We already added empty string in ctor
|
||||
assert termsFilePointer == startTermsFilePointer;
|
||||
return;
|
||||
}
|
||||
final int lengthSave = text.length;
|
||||
text.length = indexedTermPrefixLength(lastTerm, text);
|
||||
try {
|
||||
|
@ -232,9 +232,7 @@ public class FST<T> {
|
||||
|
||||
void setEmptyOutput(T v) throws IOException {
|
||||
if (emptyOutput != null) {
|
||||
if (!emptyOutput.equals(v)) {
|
||||
emptyOutput = outputs.merge(emptyOutput, v);
|
||||
}
|
||||
emptyOutput = outputs.merge(emptyOutput, v);
|
||||
} else {
|
||||
emptyOutput = v;
|
||||
}
|
||||
|
@ -540,7 +540,7 @@ public class TestFSTs extends LuceneTestCase {
|
||||
Object output = run(fst, term, null);
|
||||
|
||||
assertNotNull("term " + inputToString(inputMode, term) + " is not accepted", output);
|
||||
assertEquals(output, pair.output);
|
||||
assertEquals(pair.output, output);
|
||||
|
||||
// verify enum's next
|
||||
IntsRefFSTEnum.InputOutput<T> t = fstEnum.next();
|
||||
|
Loading…
x
Reference in New Issue
Block a user