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
- クラスは完全修飾クラス名に変換されます。スレッドコンテキストクラスローダーは、クラスがリハイドレートされる際に使用されます。