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