2017-11-10 4 views
3

Ich habe eine Entität mit Indexerstellung Zeitstempel von java.time.Instant Typ und ich möchte Suchergebnisse nach Erstellung Zeitstempel Bereich facettieren.
Das Unternehmen sieht die folgende Art und Weise:Faceting Hibernate Suchergebnisse von Instant-Bereich schlägt fehl

@Entity 
@Indexed 
public class Document { 

    @Id 
    @DocumentId 
    private Long id; 

    @Field 
    private String name; 

    @Field(analyze = Analyze.NO) 
    @Facet 
    private Instant creationTimestamp; 
} 

Wenn ich meine Anwendung starten ich die folgende Fehlermeldung erhalten:

org.hibernate.search.exception.SearchException: HSEARCH000264: @Facet is not supported for type 'java.time.Instant'. See org.hibernate.search.bugs.Document#creationTimestamp 

Ich habe nichts zu Facettierung in hibernate documentation durch Instant-Wert im Zusammenhang gefunden.

Ist es möglich, Suchresultate nach dem Erstellungszeitstempelbereich in den Ruhezustand zu versetzen?

Ich habe einen Fehler Testfall erstellt hier: github repo link

Antwort

1

Ich fürchte, Java 8 Datum/Zeit-Typen sind noch nicht im Hibernate Search Facettierung Subsystem unterstützt. Ich habe ein Ticket an diese Adresse, aber ich kann nicht sagen, wann wir (es gibt interne Komplikationen): https://hibernate.atlassian.net/browse/HSEARCH-2954

In der Zwischenzeit können Sie rund um diesen Mangel an Unterstützung arbeiten, indem sie ein @Transient langes Feld, die den Zeitstempel verwendet :

@Entity 
@Indexed 
public class Document { 

    @Id 
    @DocumentId 
    private Long id; 

    @Field 
    private String name; 

    private Instant creationTimestamp; 

    @Field(analyze = Analyze.NO) 
    @Facet 
    @javax.persistence.Transient 
    public Long getCreationForFaceting() { 
     return creationTimestamp == null ? null : creationTimestamp.toEpochMilli(); 
    } 
} 

Und dann Abfragen mit langen Zeitstempel auch.

Keine ideale Lösung, aber es ist die einzige, die ich mir vorstellen kann.