Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

14.2.4. ブリッジ

エンティティーの基本的なマッピングを検討する際に、最も重要なファクトは無視されていました。Lucene では、すべてのインデックスフィールドは文字列として表現する必要があります。@Field アノテーションが付けられたエンティティープロパティーはすべて、インデックス化される文字列に変換する必要があります。これまでに言及していない理由は、Hibernate Search のほとんどのプロパティーでは、組み込みブリッジのセットにより翻訳ジョブが実行されるためです。ただし、場合によっては、翻訳プロセスをより細かく制御する必要があります。

14.2.4.1. ビルトインブリッジ

Hibernate Search には、Java プロパティータイプとその完全なテキスト表現間の組み込みブリッジのセットがバンドルされています。
null
デフォルトごとnull要素はインデックス付けされません。Lucene は null 要素をサポートしません。ただし、状況によっては、null 値を表すカスタムトークンを追加すると便利です。詳細は、「@Field」 を参照してください。
java.lang.String
文字列はそのままインデックス付けされます
short、Short、integer、Integer、long、Long、float、Float、double、Double、BigInteger、BigDecimal
数値は文字列表現に変換されます。数値は Lucene (範囲指定のクエリーで使用される) によって追加されず、パディングする必要があることに注意してください。
注記
Range クエリーの使用には欠点があります。別の方法は、結果クエリーを適切な範囲に対してフィルターするフィルタークエリーを使用することです。
Hibernate Search は、で説明されているように、カスタム StringBridge の使用もサポートします。「カスタムブリッジ」
java.util.Date
日付は yyyyMMddHHmmssSSS として GMT 時間 (EST 2006 年 11 月 7 日 4:03 PM 12 秒の場合は 200611072203012) として保存されます。内部形式を気にする必要はありません。TermRangeQuery を使用する場合は、グリニッジ標準時 (GMT) で日付を示す必要があることを把握しておくことが重要です。
通常は、ミリ秒単位までの日付を保存する必要はありません。@DateBridge は、インデックス に保存する適切な分解能を定義します ((@DateBridge(resolution=Resolution.DAY))。日付のパターンは、それに応じて切り捨てられます。
@Entity 
@Indexed
public class Meeting {
    @Field(analyze=Analyze.NO)
    @DateBridge(resolution=Resolution.MINUTE)
    private Date date;
    ...
警告
分解能が MILLISECOND 未満の日付は、@DocumentId にはできません。
重要
デフォルトの Date ブリッジは Lucene の DateTools を使用して、String との相互互換を行います。これは、すべての日付が GMT 時間で表されることを意味します。固定タイムゾーンに日付を保存する必要がある場合は、カスタムの日付ブリッジを実装する必要があります。日付のインデックス作成および検索に関するアプリケーションの要件を理解している。
java.net.URI、java.net.URL
URI および URL は文字列表現に変換されます。
java.lang.Class
クラスは完全修飾クラス名に変換されます。スレッドコンテキストクラスローダーは、クラスがリハイドレートされる際に使用されます。