mirror of https://github.com/apache/lucene.git
LUCENE-5324: AnalyzerWrapper.get(PositionIncrement|Offset)Gap can now be overridden.
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1538557 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
5d448216d4
commit
f49abe537a
|
@ -212,6 +212,9 @@ API Changes:
|
||||||
* LUCENE-5321: Remove Facet42DocValuesFormat. Use DirectDocValuesFormat if you
|
* LUCENE-5321: Remove Facet42DocValuesFormat. Use DirectDocValuesFormat if you
|
||||||
want to load the category list into memory. (Shai Erera, Mike McCandless)
|
want to load the category list into memory. (Shai Erera, Mike McCandless)
|
||||||
|
|
||||||
|
* LUCENE-5324: AnalyzerWrapper.getPositionIncrementGap and getOffsetGap can now
|
||||||
|
be overridden. (Adrien Grand)
|
||||||
|
|
||||||
Optimizations
|
Optimizations
|
||||||
|
|
||||||
* LUCENE-5225: The ToParentBlockJoinQuery only keeps tracks of the the child
|
* LUCENE-5225: The ToParentBlockJoinQuery only keeps tracks of the the child
|
||||||
|
|
|
@ -103,12 +103,12 @@ public abstract class AnalyzerWrapper extends Analyzer {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final int getPositionIncrementGap(String fieldName) {
|
public int getPositionIncrementGap(String fieldName) {
|
||||||
return getWrappedAnalyzer(fieldName).getPositionIncrementGap(fieldName);
|
return getWrappedAnalyzer(fieldName).getPositionIncrementGap(fieldName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final int getOffsetGap(String fieldName) {
|
public int getOffsetGap(String fieldName) {
|
||||||
return getWrappedAnalyzer(fieldName).getOffsetGap(fieldName);
|
return getWrappedAnalyzer(fieldName).getOffsetGap(fieldName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,17 @@ import java.io.StringReader;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
import org.apache.lucene.document.Document;
|
||||||
|
import org.apache.lucene.document.Field;
|
||||||
|
import org.apache.lucene.document.FieldType;
|
||||||
|
import org.apache.lucene.index.AtomicReader;
|
||||||
|
import org.apache.lucene.index.DocsAndPositionsEnum;
|
||||||
|
import org.apache.lucene.index.FieldInfo.IndexOptions;
|
||||||
|
import org.apache.lucene.index.Fields;
|
||||||
|
import org.apache.lucene.index.RandomIndexWriter;
|
||||||
|
import org.apache.lucene.index.Terms;
|
||||||
|
import org.apache.lucene.index.TermsEnum;
|
||||||
|
import org.apache.lucene.util.BytesRef;
|
||||||
import org.apache.lucene.util._TestUtil;
|
import org.apache.lucene.util._TestUtil;
|
||||||
import org.apache.lucene.util.automaton.Automaton;
|
import org.apache.lucene.util.automaton.Automaton;
|
||||||
import org.apache.lucene.util.automaton.AutomatonTestUtil;
|
import org.apache.lucene.util.automaton.AutomatonTestUtil;
|
||||||
|
@ -276,4 +287,53 @@ public class TestMockAnalyzer extends BaseTokenStreamTestCase {
|
||||||
|
|
||||||
checkOneTerm(a, "abc", "aabc");
|
checkOneTerm(a, "abc", "aabc");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testChangeGaps() throws Exception {
|
||||||
|
// LUCENE-5324: check that it is possible to change the wrapper's gaps
|
||||||
|
final int positionGap = random().nextInt(1000);
|
||||||
|
final int offsetGap = random().nextInt(1000);
|
||||||
|
final Analyzer delegate = new MockAnalyzer(random());
|
||||||
|
final Analyzer a = new AnalyzerWrapper(delegate.getReuseStrategy()) {
|
||||||
|
@Override
|
||||||
|
protected Analyzer getWrappedAnalyzer(String fieldName) {
|
||||||
|
return delegate;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public int getPositionIncrementGap(String fieldName) {
|
||||||
|
return positionGap;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public int getOffsetGap(String fieldName) {
|
||||||
|
return offsetGap;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
final RandomIndexWriter writer = new RandomIndexWriter(random(), newDirectory());
|
||||||
|
final Document doc = new Document();
|
||||||
|
final FieldType ft = new FieldType();
|
||||||
|
ft.setIndexed(true);
|
||||||
|
ft.setTokenized(true);
|
||||||
|
ft.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
|
||||||
|
doc.add(new Field("f", "a", ft));
|
||||||
|
doc.add(new Field("f", "a", ft));
|
||||||
|
writer.addDocument(doc, a);
|
||||||
|
final AtomicReader reader = getOnlySegmentReader(writer.getReader());
|
||||||
|
final Fields fields = reader.fields();
|
||||||
|
final Terms terms = fields.terms("f");
|
||||||
|
final TermsEnum te = terms.iterator(null);
|
||||||
|
assertEquals(new BytesRef("a"), te.next());
|
||||||
|
final DocsAndPositionsEnum dpe = te.docsAndPositions(null, null);
|
||||||
|
assertEquals(0, dpe.nextDoc());
|
||||||
|
assertEquals(2, dpe.freq());
|
||||||
|
assertEquals(0, dpe.nextPosition());
|
||||||
|
assertEquals(0, dpe.startOffset());
|
||||||
|
final int endOffset = dpe.endOffset();
|
||||||
|
assertEquals(1 + positionGap, dpe.nextPosition());
|
||||||
|
assertEquals(1 + endOffset + offsetGap, dpe.endOffset());
|
||||||
|
assertEquals(null, te.next());
|
||||||
|
reader.close();
|
||||||
|
writer.close();
|
||||||
|
writer.w.getDirectory().close();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue