に を追加しようとしCharFilter
ていStandardAnalyzer
ます。私の意図は、インデックスを作成するすべてのテキストから句読点を削除することです。たとえば、PrefixQuery "pf" を "PF Chang's" に一致させたり、"zaras" を "Zara's" に一致させたりします。
ここでの攻撃の最も簡単な計画は、分析の前にすべての句読点を除外することです。Analyzerパッケージのドキュメントによると、CharFilter
.
しかし、実際にCharFilter
をアナライザーに挿入するのはほとんど不可能に思えます!
Analyzer.initReaderの JavaDoc には、「CharFilter を挿入する場合はこれをオーバーライドしてください」と書かれています。
コードが Analyzer を拡張する場合、initReader を拡張できますが、抽象的なcreateComponentsをベースの StandardAnalyzer に委任することはできません。これは保護されているためです。tokenStreamは最終的なものであるため、ベース アナライザーにデリゲートできません。したがって、Analyzer のサブクラスは、別の Analyzer を使用して汚れた作業を行うことはできないようです。
AnalyzerWrapper
希望にぴったりのクラスがある!基本アナライザーを提供して、必要な部分のみをオーバーライドできます。ただし… initReaderはベース アナライザーに委譲するために既にオーバーライドされており、このオーバーライドは「最終」です。残念!
パッケージに自分を入れて、保護されたメソッドにアクセスできると思いますがAnalyzer
、これは、実際に使用する必要があるパブリック API をバイパスするためのうんざりするほどハックな方法のようです。org.apache.lucene.analyzers
createComponents
ここで何かギラギラしていませんか?StandardAnalyzer
カスタム を使用するように を修正するにはどうすればよいCharFilter
ですか?