"createComponents" 在 Lucene 中只是有时被调用,为什么?

"createComponents" in Lucene was only called sometimes, why?

我有自己的分析仪

protected TokenStreamComponents createComponents(final String fieldName, final Reader reader){}

但是我注意到这个方法并没有一直被调用。

如果给定的字符串是:"two words",那么就会调用它。

如果给定的字符串是:"two-words",那么它不会被调用。

如果给定的字符串是:"two/words",那么它不会被调用。

但我想我可以在这个方法中使用分词器来解析我的字符串。

我的目标是:

"two words" 应该被认为是两个 AND 词

"two-words" 也应该被认为是两个 AND 词

也是"two/words",也应该解析成两个AND字

这就是我使用自己的分析仪的原因。但令我惊讶的是,后两个示例中没有调用分析器。

我该怎么办?

分析器组件可以重复使用,因此如果您同时索引多个文档,您将只会调用一次 createComponents()

为确保您的数据流得到正确分析,请使用某种登录 incrementToken() 方法的 Tokenizer and/or 过滤器。或者,更好的是,在过滤器链的顶部临时附加一个日志记录过滤器,并在分析阶段记录所有 incrementToken()reset()close()end() 方法的调用.这有助于更好地理解分词器和过滤器的生命周期。