Elasticsearch: API de mise Ă  jour : mise Ă  jour par requĂȘte

CrĂ©Ă© le 12 janv. 2012  Â·  160Commentaires  Â·  Source: elastic/elasticsearch

1583 permet de mettre Ă  jour des documents individuels. La mise Ă  jour par requĂȘte rĂ©duira radicalement les allers-retours rĂ©seau si vous souhaitez mettre Ă  jour un certain nombre de documents et transfĂ©rer le travail du client vers ES.

curl -XPOST localhost:9200/index/type/_update -d '{
    "query" : { "constant_score" : { "filter" : { "term" : { "counter" : 0 } } } },
    "script" : "ctx._source.counter += count",
    "params" : {
        "count" : 4
    }
}'
:DistributeCRUD

Commentaire le plus utile

La mise Ă  jour par requĂȘte est disponible dans les versions 2.3.0 et 5.0.0-alpha-1. Les docs sont ici .

Tous les 160 commentaires

J'adorerais vraiment cette fonctionnalité aussi!

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

j'ai vraiment besoin de cette fonctionnalité

:+1:

En attendant que cette fonctionnalité soit officiellement terminée et publiée, j'ai empaqueté la pull request #2231 en tant que plugin : yakaz/elasticsearch-action-updatebyquery .
S'amuser.

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

:+1: :prie:

+1

+1

Existe-t-il un moyen de transmettre le score de la requĂȘte en paramĂštre au script de mise Ă  jour ? J'ai besoin de mettre Ă  jour les entrĂ©es avec les scores mis Ă  jour en fonction des champs de ses enfants.

+1

+1

+1

@scottc52 Avez-vous réussi à le faire? Je cherche aussi un moyen de le faire.

+1

@gboivin Non. Je fais une requĂȘte has_child et j'envoie une demande de mise Ă  jour sĂ©parĂ©e, mais c'est lent.

en attendant cette fonctionnalité aussi ..

+1

+1

+1

+1

+1

+1

+1

Je viens d'Ă©crire un petit script pour aider Ă  attendre quelque chose... plus "prĂȘt pour la production" ;-)

https://github.com/YannBrrd/esNodeUpdater

N'hésitez pas à commenter/mettre à jour...

+1

Y a-t-il un statut officiel sur cette fonctionnalité de la part de l'équipe de développement ? Je ne vois aucune contribution de leur part. Est-il prévu d'ajouter cette fonctionnalité au noyau ou préférez-vous que les utilisateurs utilisent un plugin comme celui répertorié ci-dessus ?

Nous prĂ©voyons de revenir sur celui-ci, la principale raison pour laquelle nous avons mis cela en attente est que nous devons avoir un moyen d'arrĂȘter la mise Ă  jour existante par les requĂȘtes, car elles peuvent ĂȘtre exĂ©cutĂ©es par erreur sur une grande quantitĂ© de donnĂ©es, provoquant des problĂšmes. .

+1. Merci pour la mise Ă  jour et le travail dessus.

+1

+1

+1

+1

+1, semble utile

+1

+1

+1

+1

+1

+1

+1

+1

+2

+1

+10

+1

+1

+1

Avez-vous dĂ©jĂ  pensĂ© Ă  implĂ©menter avec un double appel HTTP cette fonctionnalitĂ©. Je pense aux rĂ©chauffeurs qui donnent la possibilitĂ© de stocker la requĂȘte puis d'exĂ©cuter la requĂȘte (c'est pas vraiment la mĂȘme chose mais ça me fait rĂ©flĂ©chir).

@kimchy vous dites que vous pensez Ă  un moyen d'arrĂȘter la mise Ă  jour si elle a Ă©tĂ© lancĂ©e par erreur sur une grande quantitĂ© de donnĂ©es. Si vous l'arrĂȘtez, les donnĂ©es indexĂ©es seront peut-ĂȘtre dans un Ă©tat invalide (il est peut-ĂȘtre possible de revenir en arriĂšre...?). Peut-ĂȘtre qu'une meilleure approche sera d'Ă©viter les erreurs.

Si vous avez besoin de deux appels HTTP avant de dĂ©clencher la mise Ă  jour en masse rĂ©elle (1 pour prĂ©parer et 1 pour la dĂ©clencher rĂ©ellement avec un identifiant de transaction entre), puis un gestionnaire de statut de mise Ă  jour (comme le dataimporthandler dans SolR) pour savoir quand la requĂȘte est vraiment terminĂ©e.

Je ne suis pas sĂ»r d'ĂȘtre vraiment clair mais je pense que cela peut ĂȘtre une solution pour Ă©viter les erreurs d'appels...

+1

+1

J'aimerais Ă©galement voter pour cela.

+1

@kimchy : Les performances ne peuvent pas ĂȘtre la question : actuellement, j'exĂ©cute des milliers de requĂȘtes pour rechercher des donnĂ©es (par exemple, recherche d'adresses d'index OSM pour les emplacements GPS - les recherches sont rapides, hĂ©, j'ai ElasticSearch !) et mets Ă  jour chaque document dans un autre index (par exemple pour ajouter une adresse en texte clair). Mes mises Ă  jour ajoutent de nouveaux champs. Une mise Ă  jour en masse dans ES doit ĂȘtre plus efficace que 10.000 requĂȘtes de recherche + 10.000 requĂȘtes de mise Ă  jour (utilisant Ă©galement des mises Ă  jour en masse...). Du point de vue du codage et de l'exĂ©cution, ce serait plus efficace, par exemple, le fichier de mise Ă  jour en masse a 20 000 lignes et ne peut en avoir que 2 avec la nouvelle fonctionnalitĂ© - toutes les donnĂ©es sont dĂ©placĂ©es sur le rĂ©seau et obligent ES Ă  lire les fichiers de mise Ă  jour en masse ...

Peut-ĂȘtre que vous acceptez d'ajouter des limites Ă  l'opĂ©ration de mise Ă  jour, par exemple _update/_query=some_conditions&size=1000 de cette maniĂšre, cela Ă©vite de mettre Ă  jour un million de documents - et nous, en tant que dĂ©veloppeur, pouvons dĂ©cider si nous exĂ©cutons 1000*1000 mises Ă  jour pour mettre Ă  jour un million d'enregistrements... Il devrait renvoyer le nombre de documents mis Ă  jour pour donner un certain contrĂŽle si un autre appel de mise Ă  jour est requis.

+1

Pour mon scénario (enrichir les enregistrements aprÚs les recherches dans d'autres indices), je pourrais procéder d'une autre maniÚre : insérer d'abord les données dans mongoDb, effectuer des recherches dans ElasticSearch mettre à jour les enregistrements dans Mongo, utiliser mongo river pour obtenir les résultats finaux dans ElasticSearch pour les afficher dans l'interface graphique (construire au-dessus de ES). Quelqu'un a-t-il connu de tels scénarios? J'espérais pouvoir utiliser ES uniquement... jusqu'à présent, j'ai refusé d'utiliser une base de données dans mon projet.

Salut,

vous pouvez simplement utiliser Couchbase + Elasticsearch pour cela, comme Couchbase
propose une interface avec Elasticsearch

Cordialement,
Yann Barraud

03-02-2014 seti123 [email protected] :

Pour mon scénario (enrichir les enregistrements aprÚs des recherches dans d'autres indices), je pourrais
faites-le d'une autre maniÚre : insérez d'abord les données dans mongoDb, effectuez des recherches dans
ElasticSearch met à jour les enregistrements dans Mongo, utilisez la riviÚre mongo pour obtenir les résultats finaux
dans ElasticSearch pour l'afficher dans l'interface graphique (construit sur ES). Quelqu'un a-t-il
expérimenté avec de tels scénarios? J'espérais que je pourrais aller ES seule façon ... jusqu'à ce que
maintenant, j'ai rejeté l'utilisation d'une base de données dans mon projet.

RĂ©pondez directement Ă  cet e-mail ou consultez-le sur Gi tHubhttps://github.com/elasticsearch/elasticsearch/issues/1607#issuecomment -33917801
.

+1

+100

+1

+1

Existe-t-il une alternative dans ElasticSearch, par exemple déclencher un script qui effectue une action lorsque de nouvelles données sont insérées ou mises à jour ? Une sorte d'avant Index-Trigger pourrait m'aider à supprimer la chaßne de pré-traitement (nous avons maintenant fait Message Ques avec REDIS et la chaßne de traitement 0MQ avant d'insérer des données dans ES - tout cela coûte la bande passante du réseau pour mélanger les données pour un traitement parallÚle ... )

Je voudrais voir
http://localhost :9200/index/type/_preprocessBeforeIndex?script=myDataAnalysisScript
http://localhost :9200/index/type/_preprocessBeforeUpdate?script=myDataAnalysisScript
Le script doit pouvoir ajouter de nouveaux champs Ă  l'enregistrement en cours avant que ES ne le stocke/l'indexe (pour Ă©viter une double action d'indexation aprĂšs les modifications). Comme nous travaillons beaucoup avec node.js, les scripts devraient fonctionner dans le langage requis (dans notre cas JavaScript).

Encore mieux si nous pouvions définir le script dans le MAPPING par type de données plutÎt que sur un indice généré.
Existe-t-il un plug-in capable de déclencher de tels scripts ? Une documentation sur l'utilisation de l'API ES dans les scripts ?

+1

+1

+1

+1

+1

+1

+1

+1

+1

En attente de cette fonctionnalité... (+1)

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

Cette fonctionnalité est-elle en cours de développement ?
Cela résoudrait tant de problÚmes qui sont presque impossibles à gérer de maniÚre fiable au niveau de l'application en ce moment.

+1

+1

+1

Juste pour vous rappeler que depuis la mi-février 2013, j'ai empaqueté, et maintenu depuis, la "demande de tirage officielle" #2231 via la branche de @martijnvg en tant que plugin : yakaz/elasticsearch-action-updatebyquery .

+1

+1

+1

+1

+1
Comment est-il possible que cette fonctionnalité depuis février 2013 ne soit toujours pas fusionnée à master ?

+1
Idem sur le commentaire de @KrzysztofWilczek . Pourquoi le PR a-t-il stagné au cours de la derniÚre année sans aucune mise à jour ? C'est de loin la question la plus commentée.

+1

Nous avons eu ce problĂšme il y a plusieurs mois (voir mes messages comme @seti123 janvier/fĂ©vrier) et j'aimerais partager nos rĂ©sultats - aprĂšs avoir abandonnĂ© DB+ES River (trop de soucis concernant les dĂ©pendances de version), nous avons Ă©valuĂ© notre cas d'utilisation avec succĂšs avec Crate Data (qui utilise ES comme bibliothĂšque et ajoute une interface SQL pour le mappage et la requĂȘte, y compris "mise Ă  jour par requĂȘte" https://crate.io/docs/stable/sql/dml.html#updating-data ).
Un bon point de départ pour lire sur les similitudes et les différences : https://crate.io/blog/crate_data_elasticsearch

Fermé en faveur de #2230

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

mettra Ă  jour par la prise en charge des requĂȘtes setPostFilter ?
numéro n° 12295

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

quelqu'un peut-il examiner cela et donner son avis.
https://discuss.elastic.co/t/updatebyqueryresponse-throwing-timeout/29176

La mise Ă  jour par requĂȘte Ă©choue lors de la mise Ă  jour de plus de 20 millions d'enregistrements.

@Praveen82, vous utilisez un plugin tiers. Ce n'est pas le bon endroit pour demander de l'aide, vous devriez publier cela en tant que problÚme sur le référentiel de ce plugin.

https://github.com/elastic/elasticsearch/pull/15125 implémente une syntaxe qui ressemblera un peu à

curl -XPOST localhost:9200/index/type/_update_by_query -d '{
    "query" : { "term" : { "counter" : 0 } },
    "script" : {
      "inline": "ctx._source.counter += count",
      "params" : {
          "count" : 4
      }
  }
}'

La raison pour laquelle cela a Ă©tĂ© bloquĂ© pendant si longtemps est Ă  cause de ces dĂ©lais d'attente : jusqu'Ă  prĂ©sent, il existait un moyen de lancer un travail de longue durĂ©e dans Elasticsearch et de rendre compte de leur statut et de leurs Ă©lĂ©ments. Avec l'API de gestion des tĂąches (#15347) Ă©minente, j'ai repris le flambeau des choses de style "rĂ©indexation" et "mise Ă  jour par requĂȘte" et les ai recommencĂ©es avec l'intention de les intĂ©grer Ă  la gestion des tĂąches dĂšs que possible.

Quoi qu'il en soit, #15125 et tout PR de suivi sont l'endroit idéal pour rechercher cette fonctionnalité.

+1

+1

+1

+1

+1

La mise Ă  jour par requĂȘte est disponible dans les versions 2.3.0 et 5.0.0-alpha-1. Les docs sont ici .

La mise Ă  jour par requĂȘte en 2.3.+ ou 5.+ prend-elle en charge le plugin javascript ?

La mise Ă  jour par requĂȘte en 2.3.+ ou 5.+ prend-elle en charge le plugin javascript ?

Si vous le voulez vraiment, bien sĂ»r. Dans 2.3+, nous testons la mise Ă  jour par requĂȘte contre groovy et dans 5.+, nous testons contre indolore. Nous avions l'habitude de tester contre groovy et cela fonctionnait aussi lĂ -bas. J'espĂšre que javascript fonctionnera bien.

Le support JS serait plutĂŽt simple.

Le support JS serait plutĂŽt simple.

Comme je l'ai dit, il existe, il suffit d'installer le plugin.

Le problÚme avec tous ces langages est que leur implémentation sur la JVM n'est pas correctement orientée pour l'intégration. C'est pourquoi nous ne l'incluons pas par défaut.

Quoi qu'il en soit, si vous voulez en parler davantage, je pense que Discuter.elastic.co est un endroit plus approprié pour cela.

Cette page vous a été utile?
0 / 5 - 0 notes