У меня есть документы с функциями «слово» и «стебель». У одного слова может быть несколько основ, поэтому я индексирую признаки «основы», управляя приращением позиции. Я делаю это следующим образом:
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);
Вы видите в коде, что я инициализирую поле с фиксированным значением String для его сохранения, а затем передаю в него поток токенов (я нашел это решение где-то здесь, в stackoverflow). Я выполняю эти точные шаги для каждого join_token со стеблями. В результате я смотрю на TermVector моих слов в Луке, и несколько основ для одного слова появляются последовательно (разные!), В то время как они должны занимать одну позицию. Что пойдет не так?