アナライザーを使用して構築された Lucene インデックスがあります。インデックスを使用してコンテンツを検索していますが、ほとんどの場合、アナライザーが必要です。
さて、アナライザーの影響を受けずにフィールド内のテキストを検索したい場合はほとんどありませんが、同じインデックスのフィールドを検索することは可能ですか? クエリを作成するにはどうすればよいですか?
ワイルドカード クエリを使用すると、生のテキストで検索を実行したいときに、分析されたテキスト内が検索されます。
コメントで説明したケースは、ステマーでアナライザーを使用していることを示しています。おそらくEnglishAnalyzer (これにはPorterStemmerが組み込まれています)。アナライザーをまったく使用せずにトークン化されていないフィールドが作成され、検索が困難になるのではなく、Stem を使用しないアナライザーを調べます。
StandardAnalyzer
- 優れた標準であり、Unicode 標準のテキスト セグメンテーションを実装しています。主に言語固有ではありません。SimpleAnalyzer
-示されているように、非常に単純なアナライザー。連続した文字のグループにトークン化し、それらを小文字にします。警告: 数字はこのトークナイザーによって失われます!WhitespaceAnalyzer
- また、非常に単純で、空白の周りにトークンを作成します。トークンを小文字にしたり、正規化したりしません。多くの場合、これは単純すぎて役に立ちません。ClassicAnalyzer
- 3.X で StandardAnalyzer であったもののロジックを実装します。それでも便利なアナライザーです。本当にAnalyzerなしで行きたい場合StringField
は、トークン化や分析をバイパスするだけです。
デフォルトのアナライザーを使用してドキュメントを含むフィールドと、WhitespaceAnalyzerを使用してインデックスを作成することをお勧めします。
この ussign を作成できますhttp://lucene.apache.org/core/4_0_0-BETA/analyzers-common/org/apache/lucene/analysis/miscellaneous/PerFieldAnalyzerWrapper.html
完全一致検索が必要な場合は、whitespacetokenizer を含むフィールドを検索します。それ以外の場合は、Analyzer によって処理されるテキストを含むフィールドを使用します。