Hi
I don't know if it's supported or not, but I wrote the following simple
example code to describe what I want.
Directory dir = new RAMDirectory();
Analyzer a = new SimpleAnalyzer();
IndexWriter writer = new IndexWriter(dir, a, MaxFieldLength.UNLIMITED);
Document doc = new Document();
doc.add(new Field("a", "abc", Store.NO, Index.NOT_ANALYZED));
final Term t = new Term("a", "abc");
doc.add(new Field(t.field(), new TokenStream() {
boolean done = false;
@Override
public Token next(Token reusableToken) throws IOException {
if (done) return null;
done = true;
reusableToken.setTermBuffer(t.text());
reusableToken.setPayload(new Payload(new byte[] { 1 }));
return reusableToken;
}
}));
writer.addDocument(doc);
writer.commit();
writer.close();
IndexReader reader = IndexReader.open(dir, true);
TermPositions tp = reader.termPositions(t);
tp.next();
tp.nextPosition();
System.out.println(tp.getPayloadLength());
reader.close();
Basically, I add the same Field twice (a:abc), the second time I just set a
Payload. The program prints 0 as the payload length (1 line above the last).
If I change either the field name or field text, it prints 1.
Bug or works as designed?
Shai