13.2.4. Ponts
Un détail important du mappage de base a été mis de côté jusqu'à présent. Dans Lucene, tous les champs d'index doivent être représentés comme des chaînes. Toutes les propriétés d'entité annotées de
@Field
doivent être converties en chaînes à indexer. La raison pour laquelle ce détail n'a pas été mentionné jusqu'à présent est que pour la plupart de vos propriétés Hibernate Search effectue la traduction pour vous grâce à un ensemble de ponts intégrés. Cependant, il vous faudra quelque fois exercer un contrôle plus détaillé du procédé de traduction.
13.2.4.1. Ponts intégrés
Hibernate Search contient un ensemble de ponts intégrés entre un type de propriété Java et sa représentation de texte intégral.
- null
- Par défaut, les éléments
null
ne sont pas indexés. Lucene ne prend pas en charge les éléments nuls. Il peut cependant être utile dans certaines situations d'insérer un jeton personnalisé représentant la valeurnull
. Pour plus d'informations, veuillez consulter Section 13.2.1.1.2, « @Field ». - java.lang.String
- Les chaînes sont indexées telles quelles
- short, Short, integer, Integer, long, Long, float, Float, double, Double, BigInteger, BigDecimal (court, Court, entier, Entier, long, Long, flottant, Flottant, double, Double, BigInteger, BigDecimal)
- Les nombres sont convertis en leur représentation de chaîne. Veuillez noter que les nombres ne peuvent pas être comparés par Lucene (c'est-à-dire utilisés en requêtes de plage de données) immédiatement : ils doivent être remplis.
Note
L'utilisation d'une requête de plage de données présente des inconvénients. Une alternative consiste à utiliser une requête de filtre qui filtrera la requête de résultat à la plage qui convient.Hibernate Search prend également en charge l'utilisation d'un StringBridge personnalisé tel que décrit dans la Section 13.2.4.2, « Ponts personnalisés ». - java.util.Date
- Les dates suivent le modèle yyyyMMddHHmmssSSS sur le fuseau horaire GMT (par exemple, 200611072203012 pour le 7 novembre 2006 à 16h03 et 12ms EST). Le format interne n'est pas très important. Ce qui compte, c'est que lorsque vous utilisez un TermRangeQuery, vous devez savoir que les dates doivent être exprimées en heure GMT.Il n'est généralement pas nécessaire d'enregistrer la date à la milliseconde près.
@DateBridge
définit la résolution que vous souhaitez enregistrer dans l'index (@DateBridge(resolution=Resolution.DAY)
). Le modèle de date sera ensuite tronqué en conséquence.@Entity @Indexed public class Meeting { @Field(analyze=Analyze.NO) @DateBridge(resolution=Resolution.MINUTE) private Date date; ...
Avertissement
Une date dont la résolution est inférieure àMILLISECOND
ne peut pas être un@DocumentId
Important
Le pont par défautDate
utilise lesDateTools
de Lucene pour convertir depuis et versString
. Cela signifie que toutes les dates sont exprimées en heure GMT. Si vous devez enregistrer vos dates dans un fuseau horaire défini, vous devrez alors mettre en œuvre un pont de date personnalisé. Veuillez vous assurer de comprendre les pré-requis de vos applications en ce qui concerne l'indexation et recherche de date. - java.net.URI, java.net.URL
- Les URI et URL sont convertis à leur représentation de chaîne.
- java.lang.Class
- Les classes sont converties à leur nom de classe entier. Le chargeur de classe de contexte de thread est utilisé lorsque la classe est réhydratée.