"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()
方法的调用.这有助于更好地理解分词器和过滤器的生命周期。
我有自己的分析仪
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()
方法的调用.这有助于更好地理解分词器和过滤器的生命周期。