Имам документи с функции "word" и "stem". Една дума може да има няколко корена, така че аз индексирам характеристиките на "ствола", манипулиращи стъпките на позицията. Правя го по следния начин:
FieldType type = new FieldType();
type.setIndexed(true);
type.setStored(true);
type.setOmitNorms(true);
type.setTokenized(true);
type.setStoreTermVectorOffsets(true);
type.setStoreTermVectorPositions(true);
type.setStoreTermVectors(true);
String join_token = tok.nextToken(); // token is like "stem1 stem2 stem3"
TokenStream stream = new WhitespaceTokenizer(Version.LUCENE_41, new StringReader(join_token));
PositionIncrementAttribute attr = stream.addAttribute(PositionIncrementAttribute.class);
attr.setPositionIncrement(0);
stream.addAttribute(OffsetAttribute.class);
stream.addAttribute(CharTermAttribute.class);
feature = new Field(name,
join_token,
type);
feature.setTokenStream(stream);
doc.add(feature);
Виждате в кода, че аз инициализирам Field с фиксирана стойност на String, за да бъде съхранен, и след това предавам поток от токени в него (намерих това решение някъде тук в stackoverflow). Изпълнявам тези точни стъпки за всеки join_token със стъбла. В резултат на това наблюдавам TermVector на моите думи в Лука и множество корени за една единствена дума се появяват на последователно (различно!), докато те трябва да споделят една единствена позиция. Какво се обърка?