web-dev-qa-db-fra.com

API Elasticsearch Bulk - Index vs Créer / Mettre à jour

J'utilise Elasticsearch Bulk API pour créer ou mettre à jour des documents.

Je sais en fait s'il s'agit de créations ou de mises à jour, mais je peux simplifier mon code en les faisant tous index, ou "upserts" au sens SQL.

Y a-t-il un inconvénient à utiliser index (et à laisser ES le comprendre) par rapport à l'utilisation des create et update plus explicites?

36
Kong

Si vous envoyez create, vous devez vous assurer que le document n'existe pas encore dans votre index sinon l'appel échouera, alors que l'envoi du même document avec index réussira toujours.

Ensuite, si pour des raisons de performances, vous savez que vous allez créer un document (avec create ou index) et que vous ne mettrez à jour que quelques propriétés, puis en utilisant update pourrait avoir du sens.

Sinon, si vous envoyez toujours des documents complets, j'utiliserais tout le temps index, à la fois pour la création et la mise à jour. Chaque fois qu'il voit une action index, ES crée le document s'il n'existe pas ou le remplace s'il existe, mais l'appel réussit toujours.

60
Val

La réponse courte: non, il n'y a aucun inconvénient.

Les points de terminaison de création et de mise à jour sont des cas particuliers. Avec create, vous ne voulez rien faire si le document est déjà là. Avec la mise à jour, vous pouvez fournir moins de données si vous ne disposez pas de toutes les données du document, vous pouvez simplement ajouter quelques champs. Vous pouvez également vous assurer que le document n'est indexé que s'il est déjà là avec la mise à jour.

8
Jettro Coenradie

Vous ne pourrez pas utiliser l'index pour tout. Selon le docs :

l'index ajoutera ou remplacera un document si nécessaire

De plus, si vous mettez à jour un document, il peut être utile d'ajouter l'indicateur 'doc_as_upsert'. Plus d'infos ici et ici

4
Suhas K