「単語」と「語幹」の機能を備えたドキュメントがあります。1つの単語に複数の語幹がある場合があるため、位置の増分を操作する「語幹」機能にインデックスを付けます。私はそれを次のように行います:
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);
コードで、フィールドを固定の文字列値で初期化して保存し、トークンストリームをその中に渡すことがわかります(このソリューションは、stackoverflowのどこかにあります)。ステムを使用してjoin_tokenごとにこれらの正確な手順を実行します。その結果、私はルークの私の単語のTermVectorを監視し、1つの単語の複数の語幹が連続して(異なる!)表示されますが、それらは1つの単一の位置を共有する必要があります。何が問題なのですか?