J'utilise elasticsearch pour indexer mes documents.
Est-il possible de lui demander de renvoyer uniquement des champs particuliers au lieu du document json entier qu'il a stocké?
elasticsearch
user1199438
la source
la source
Réponses:
Oui! Utilisez un filtre source . Si vous recherchez avec JSON, cela ressemblera à ceci:
Dans ES 2.4 et versions antérieures, vous pouvez également utiliser l' option champs de l'API de recherche :
Ceci est déconseillé dans ES 5+. Et les filtres sources sont de toute façon plus puissants!
la source
J'ai trouvé les documents
get api
utiles pour - en particulier les deux sections, Filtrage des sources et Champs : https://www.elastic.co/guide/en/elasticsearch/reference/7.3/docs-get.html#get-source- filtrationIls déclarent sur le filtrage des sources:
Ce qui correspondait parfaitement à mon cas d'utilisation. J'ai fini par simplement filtrer la source comme ça (en utilisant la sténographie):
Pour info, ils déclarent dans la documentation sur le paramètre champs :
Il semble répondre aux champs qui ont été spécifiquement stockés, où il place chaque champ dans un tableau. Si les champs spécifiés n'ont pas été stockés, ils seront récupérés chacun à partir de la source _, ce qui pourrait entraîner des récupérations «plus lentes». J'ai également eu du mal à le faire renvoyer des champs de type objet.
Donc, en résumé, vous avez deux options, soit par filtrage de source, soit par champs [stockés].
la source
la source
Dans Elasticsearch 5.x, l'approche mentionnée ci-dessus est déconseillée. Vous pouvez utiliser l'approche _source, mais dans certaines situations, il peut être judicieux de stocker un champ. Par exemple, si vous avez un document avec un titre, une date et un champ de contenu très volumineux, vous souhaiterez peut-être récupérer uniquement le titre et la date sans avoir à extraire ces champs d'un grand champ _source:
Dans ce cas, vous utiliseriez:
Consultez la documentation sur l'indexation des champs stockés. Toujours heureux pour un Upvote!
la source
la source
response_filtering
https://stackoverflow.com/a/35647027/844700
la source
Filtrage source
Permet de contrôler la façon dont le champ _source est renvoyé à chaque hit.
Le mot-clé "comprend" définit les champs spécifiques.
la source
Une demande REST API GET peut être effectuée avec le paramètre '_source'.
Exemple de demande
Réponse
}
la source
Oui, en utilisant le filtre source, vous pouvez accomplir cela, voici le doc source-filtering
Exemple de demande
La sortie sera
la source
En java, vous pouvez utiliser setFetchSource comme ceci:
la source
Par exemple, vous avez un document avec trois champs:
Si vous souhaitez revenir
name
etscore
vous pouvez utiliser la commande suivante:Si vous souhaitez obtenir des champs qui correspondent à un modèle:
Peut-être exclure certains champs:
la source
En utilisant l'API Java, j'utilise ce qui suit pour obtenir tous les enregistrements d'un ensemble de champs particuliers:
la source