「GSX-R1000」などの製品コードを含むテキストの索引付けには、ClassicAnalzer をお勧めします。これを単一の用語として認識し、その部分を分割しませんでした。ただし、たとえば、「Europe/Berlin」というテキストは、ClassicAnalzer によって「Europe」と「Berlin」という単語に分割されます。これは、ClassicAnalyzer によって索引付けされたテキストに次のフレーズが含まれている場合を意味します。
Europe/Berlin GSX-R1000
「ヨーロッパ」、「ベルリン」、または「GSX-R1000」で検索できます。
ただし、検索に使用するアナライザーには注意してください。Lucene インデックスを検索するには、KeywordAnalyzer が最適だと思います。KeywordAnalyzer を使用すると、ドキュメント内の特定のフィールドを検索したり、次のような複雑なクエリを作成したりできます。
(processid:4711) (berlin)
このクエリは、「berlin」という語句を含むドキュメントを検索しますが、4711 という数字を含む「processid」フィールドも検索します。
しかし、インデックスで「europe/berlin」という語句を検索しても、結果は得られません。これは、KeywordAnalyzer が検索フレーズを変更しなかったためですが、'Europe/Berlin' というフレーズが ClassicAnalyzer によって 2 つの別個の単語に分割されたためです。つまり、「ヨーロッパ」と「ベルリン」を別々に検索する必要があります。
この競合を解決するには、次のコードを使用して、ユーザーが入力した検索語をニーズに合った検索クエリに翻訳します。
QueryParser parser = new QueryParser("content", new ClassicAnalyzer());
Query result = parser.parse(searchTerm);
searchTerm = result.toString("content");
このコードは、serach pharse を変換します
Europe/Berlin
の中へ
europe berlin
これにより、期待されるドキュメント セットが生成されます。
注:これは、より複雑な状況でも機能します。検索語
Europe/Berlin GSX-R1000
に翻訳されます:
(europe berlin) GSX-R1000
KeyWordAnalyzer を使用して、すべてのフレーズを組み合わせて正しく検索します。