0

Ich habe eine Federdaten Elasticsearch Dokument wie folgt:Kann ich ein einzigartiges Kombinationsfeld in Spring Data ElasticSearch verwenden?

@Document(indexName = "outlet") 
public class OutletIndex implements IESMapper{ 

    @Id 
    private String name; 
    private Long outletId; 
    private OutletType type; 
    private String address; 
    private String geoLocation; 
    private String city; 

    // getter and setter methods 

} 

Kann ich die Kombination von city und name Gebiet einzigartig machen? Im Frühjahr Daten jpa können wir @UniqueConstraint Option (How to introduce multi-column constraint with JPA annotations?) verwenden. Gibt es eine Möglichkeit, es in Spring Data ES zu implementieren?

Antwort

1

Es gibt kein Konzept der Unicity in Elasticsearch außer dem Feld _uid, das eine Verkettung des Zuordnungstyps und des Dokuments _id, z. outlet#someName

Anstatt die name als Dokument mit @Id, könnten Sie ein anderes Feld cityName genannt schaffen, die die Verkettung der city und die name Felder sein würde. Dies allein garantiert, dass keine zwei Dokumente dieselben Feldwerte wie city und name aufweisen, d. H. Eine Art von leichter Unicity-Einschränkung.

Wenn der Indexierungsvorgang fehlschlagen soll, wenn ein zweites Dokument mit dem gleichen Namen/Ort indiziert wird, dann wird beim Erstellen neuer Dokumente anstelle der üblichen Index-API mit PUT index/type/someNameSomeCity der Wert _create endpoint angezeigt wie dies

`PUT index/type/123/someNameSomeCity/_create` 
or 
`PUT index/type/123/someNameSomeCity?op_type=create` 

wird der Effekt sein, dass, wenn ein Dokument mit der gleichen someNameSomeCity ID bereits vorhanden ist, dann wird der Indexierungsvorgang fehlschlagen, was implizit auch eine Art von unicity garantiert.

+1

Froh, dass es geholfen hat! – Val

Verwandte Themen