Red Hat Training

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

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 valeur null. 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éfaut Date utilise les DateTools de Lucene pour convertir depuis et vers String. 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.