Quelle est la voie la plus efficace des tests de OOF si un document avec un IDID existe?
Je pouvais évidemment faire: p> ou je pourrais aller avec:
Comment puis-je vérifier les données en double sur Elasticsicsearch?
et envoyer un document vide, je suppose. p> quelque chose de plus efficace? p> p>
3 Réponses :
J'utiliserais simplement le Obtenez API qui retourne un 404 si le L'objet n'existe pas, sinon l'objet lui-même. Si vous utilisez l'API Java, vous trouverez une méthode code> isexists code> dans l'objet Si le champ Si vous utilisez l'API de repos, vous pouvez utiliser les éléments suivants: p> < Code> Curl -Xhead 'http: // localhost: 9200 / Twitter / Tweet / 1 Code> P> Il ne retournera pas le document, mais seulement 404 Sinon, sinon. Le corps de la réponse contiendra également le drapeau existant aussi, avec la même signification. P> Qu'est-ce qui est intéressant, c'est que l'utilisation de la méthode de tête correspond à une demande d'obtention interne, c'est pourquoi il n'est pas directement exposé à l'API Java , mais vous pouvez obtenir le même comportement créant un getResponse code>.
_ID code> Vous faites référence à N'est pas inclus dans vos documents, disant
champs = _ID code> ne vous donnerait pas de retour sur le
_source code> ni aucun champ spécifique sous
champs code>. Mais vous récupéreriez le
_id code> dans l'en-tête de la réponse quand même. P>
getrequest code> avec le code suivant: p>
Êtes-vous sûr que cela va arriver? Je veux dire, le "_ID" est retourné quand même, non? L'autre préoccupation est juste un trafic réseau plus élevé si le document est grand
J'ai peut-être mal compris la question, mais pourquoi vous souciez-vous de l'identifiant dans la réponse lorsque vous obtenez un document par ID? La préoccupation concernant le trafic réseau est raisonnable si vous avez de gros documents, il pourrait être utile de payer le coût de l'analyse de la source sur le côté serveur.
Je m'en fiche de l'Idid dans la réponse, je souligne juste que, puisque le _id code> est inclus dans la réponse quand même, je pensais indiquer
champs = _id code> Servir à dire au serveur de ne pas obtenir ce champ et de ne pas ajouter de travail (c'est-à-dire un besoin d'analyser le
_source code>)
Je vois ce que tu veux dire ... Mise à jour de ma réponse
Hmm ... que voulez-vous dire par "le champ _id que vous parlez de votre référence n'est pas inclus dans vos documents"? Cela signifie-t-il qu'il n'est pas inclus dans "_source"? Venez penser à cela, je peux simplement inclure un domaine inexistant non? :) champs = quelque_madeup_field code>
Vous pourriez faire exactement cela, à la fin de ce que vous faites est la même chose que le champ _id n'est pas stocké par défaut et non présent dans vos documents.
Je voulais dire que vous pouviez avoir l'identifiant dans votre document et configurer son chemin dans la cartographie. De cette façon, vous le récupéreriez parce que c'est dans votre source.
Super! Merci d'avoir expliqué cela!
@eran a juste compris que j'ai manqué quelque chose dans ma réponse;) Alors je l'ai mis à jour. En fait, l'autre réponse que vous avez obtenue (vient de le voir) est correcte.
Vous pouvez utiliser le verbe de la tête HTTP pour extraire les en-têtes uniquement.
curl -XHEAD --dump-header - localhost:9200/index/type/doc
Si sur une version avant code> 2.1 code>, vous pouvez utiliser "la recherche existant API".
Exemple: P>
Recherchez l'index Twitter pour un type Twitter par L'utilisateur "kimchy" p> Le corps de réponse contiendra un vrai ou false s'il y a des tweets par cet utilisateur: p> Vous pouvez également envoyer la requête dans le corps de la demande, comme (poste ou obtenez-vous à la fois de travail): p> La réponse sera la même. P> < / p>
Juste un rappel, Doc officiel dit que la recherche existe une API "obsolète en 2.1.0". HEAD CODE> est recommandé: elastic.co/guide/fr/elasticsearch/Guide/current/doc-exists.h tml
Elastic.co/Guide/fr/elasticsearch/Guide/ actuel / doc-existez.h tml