14.2.3.5. アナライザーの取得
複数のアナライザーがドメインモデルで使用される場合、スチーミングや概算などの利点を活かすために、アナライザーを取得することができます。この場合、同じアナライザーを使用してクエリーを作成します。または、正しいアナライザーを自動的に選択する Hibernate Search クエリー DSL を使用します。「Lucene クエリーの構築」 を参照すること。
Lucene プログラム API または Lucene クエリーパーサーのいずれを使用している場合も、特定のエンティティーのスコープ分析を取得することができます。スコープ指定のアナライザーは、インデックス化されたフィールドに応じて適切なアナライザーを適用するアナライザーです。複数のアナライザーを特定のエンティティーに定義でき、それぞれが個別のフィールドで作業することに注意してください。スコープ指定のアナライザーは、すべてのアナライザーをコンテキスト認識のアナライザーに統合します。理論はビットが複雑であるように見えますが、クエリーで正しいアナライザーを使用することは非常に簡単です。
注記
子エンティティーにプログラムによるマッピングを使用する場合は、子エンティティーによって定義されるフィールドのみを表示できます。親エンティティーから継承されたフィールドまたはメソッド (@MappedSuperclass でアノテーション付け) は設定できません。親エンティティーから継承したプロパティーを設定するには、子エンティティーのプロパティーを上書きするか、親エンティティーのプログラムによるマッピングを作成します。これは、子エンティティーで定義されていない場合に親エンティティーのフィールドとメソッドにアノテーションを付けることができないアノテーションの使用に影響します。
例14.24 完全テキストクエリーの構築時のスコープ付きテナントの使用
org.apache.lucene.queryParser.QueryParser parser = new QueryParser( "title", fullTextSession.getSearchFactory().getAnalyzer( Song.class ) ); org.apache.lucene.search.Query luceneQuery = parser.parse( "title:sky Or title_stemmed:diamond" ); org.hibernate.Query fullTextQuery = fullTextSession.createFullTextQuery( luceneQuery, Song.class ); List result = fullTextQuery.list(); //return a list of managed objects
上記の例では、song タイトルが 2 つのフィールドでインデックス化されています。
title
フィールドでは標準アナライザーが使用され、title_stemmed
フィールドには、スチーミングアナライザーが使用されます。検索ファクトリーによって提供されるアナライザーを使用すると、クエリーはターゲットフィールドに応じて適切なアナライザーを使用します。
注記
@AnalyzerDef
を介して定義されたアナライザーを、次を使用して定義名で取得することもできます。searchFactory.getAnalyzer(String)
。