Wie erstellen Sie eine unique-Einschränkung in der Elasticsearch Datenbank?
Ich bin mit elasticsearch als Dokumenten-Datenbank und jede Platte, die ich erstellen hat eine guid-id, die das system verwendet für die Datensatz-id. Geschäftsleute wollen zu bieten, ein feature, um die Benutzer haben Ihre eigenen auto file name convention (basierend auf dem Datum und wie viele Datensätze angelegt wurden, so weit dieser Tag/Monat.
Was ich brauche, ist zu verhindern, dass doppelte Datei-Namen. Gibt es einen Weg, um das setup einem indizierten Feld eindeutig sein? Wie ein sql-unique-Einschränkung?
- ich glaube, dass die nur einmalige beschränken, gilt für die
_id
Feld - Ihre Frage ist falsch, elasticsearch ist nicht eine Daten-Basis, aber eine Suchmaschine basierend auf Apache Lucene, die nicht unterstützen diese Funktionen. Beachten Sie auch, dass ES "in der Nähe von" Echtzeit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Würden Sie brauchen, um das Feld zu nutzen, der soll ja eindeutig sein, da id für Ihre Dokumente. Standardmäßig wird ein neues Dokument mit den bestehenden id überschreiben Sie das vorhandene Dokument mit der gleichen id, aber Sie können wechseln zu
op_type=create
um wieder zu bekommen eine Fehlermeldung, wenn ein Dokument mit derselben id bereits vorhanden ist.Es gibt keine Möglichkeit zu haben, die das gleiche Verhalten mit beliebigen Felder werden jedoch nur die die
_id
Feld auf diese Weise funktioniert. Ich würde wahrscheinlich betrachten Umgang mit dieser Logik im application layer statt in elasticsearch.Einer Lösung zu verwenden
uniqueId
Wert im Feld für die Angabe der Dokument-ID und verwendenop_type=create
während die Speicherung der Dokumente in ES. Mit diesem können Sie sicherstellen, dass IhreuniqueId
Feld wird haben einzigartigen Wert und wird nicht überschrieben werden, indem ein anderes derselben geschätzt Dokument.Für diese, die elasticsearch-Dokument sagt:
Hier ist ein Beispiel für die Verwendung der op_type parameter:
Wenn Sie die oben genannten Anforderung ist es ok, aber läuft es das nächste mal geben Sie einen Fehler aus.
Können Sie die _id in der Spalte, die Sie möchten, haben einzigartige contraint auf.
Hier ist die Probe, Fluss, verwendet postgresql. Yo, können ändern Sie die Datenbank-Treiber/DB-URL entsprechend Ihrer Nutzung.
Ein weiterer Ansatz könnte sein, zu erzeugen, die Zeichenfolge, die Sie speichern Sie in einem Feld, das einzigartig sein sollte durch die Integration eines auto-increment-integer. So gewährleisten Sie von Anfang an, dass Ihr Feld eindeutige Werte.
Setzen Sie Ihre Datei-name wie hier:
Auto-increment-Ganzzahlen nicht unterstützt Elasticsearch per se, sondern Sie überdecken Sie mit dieser Ansatz. Wenn Sie geschehen, zu verwenden node.js Sie können die es-Sequenz Modul.