2017-10-13 4 views
0

Dans mon programme, je supprime un enregistrement d'elasticsearch, puis je récupère les enregistrements restants.Combien de temps faut-il à elasticsearch pour supprimer un enregistrement?

J'ai écrit 2 méthodes distinctes. 1 méthode pour supprimer l'enregistrement. Et un autre pour aller chercher les enregistrements restants.

Mais quand je lance les deux méthodes Il retourne tous les enregistrements, y compris celui que j'ai supprimé.

Je cours le programme pour récupérer des données seulement après avoir reçu le message de succès de deleteRecords mais il donne tous les disques.

Après quelques secondes Si j'exécute le programme que j'ai écrit pour extraire les enregistrements restants, il fonctionne correctement Il retourne les méthodes restantes seul.

Quand j'ai essayé de courir deux méthodes en mode débogage aussi retourné que les autres enregistrements

Est-il possible de résoudre ce sans utiliser retard

Répondre

2

L'indice est actualisé toutes les secondes par défaut, c'est pourquoi vous ne voyez pas le résultat immédiatement. Ce que vous pouvez faire est d'ajouter ?refresh=wait_for à votre appel de suppression, afin de s'assurer que l'appel suivant obtiendra les résultats corrects que vous attendez. Notez que l'ajout de ce paramètre de chaîne de requête retardera un peu votre appel.

Dans le pire des cas, il reviendra au bout d'une seconde et dans le meilleur des cas, il reviendra immédiatement en fonction du délai entre deux actualisations que vous avez effectué l'appel.

+0

Merci ... –

+0

Toute autre question, devons-nous la fermer? – Val

0

Si vous utilisez un client Java, vous recherchez le thread de l'opération d'API.

Par défaut, il s'agit d'un thread séparé qui exécutera l'opération de suppression sauf si vous lui demandez explicitement de le faire sur le thread desservant la requête (qui correspond à la réponse de @ Val). De cette façon, l'appel API bloquera jusqu'à ce que l'opération soit terminée.

DeleteResponse response = client.prepareDelete("documents", "doc", "1") 
     .setOperationThreaded(false) //look here!!!! 
     .get();