Elasticsearch requête pour renvoyer tous les enregistrements
J'ai une petite base de données dans Elasticsearch et à des fins de test désirez extraire tous les enregistrements en arrière. Je suis d'essayer d'utiliser une URL de la forme...
http://localhost:9200/foo/_search?pretty=true&q={'matchAll':{''}}
Quelqu'un peut me donner l'URL que vous utiliseriez pour ce faire, s'il vous plaît?
- ...où "foo" est le nom de l'index que vous souhaitez afficher tous les enregistrements pour.
Vous devez vous connecter pour publier un commentaire.
Je pense que lucene en charge la syntaxe de la sorte:
http://localhost:9200/foo/_search?pretty=true&q=*:*
taille par défaut est de 10, de sorte que vous pouvez aussi avoir besoin
&size=BIGNUMBER
pour obtenir plus de 10 articles. (où BIGNUMBER est égal à un nombre que vous croyez est plus grand que votre dataset)MAIS, elasticsearch documentation suggère pour les grands ensembles de résultats, l'utilisation du scanner, type de recherche.
Par exemple:
et puis garder demandant que par la documentation lien ci-dessus suggère.
EDIT:
scan
Obsolète dans 2.1.0.scan
ne fournit pas de prestations sur une régulièrescroll
demande triés par_doc
. lien élastique docs (repéré par @christophe-roussy)-d
avec-XGET
??size=<N>
paramètre de chaîne de requête jusqu'à ce que votre réponse, @SteveCasey. Merci donc beaucoup pour cet affichage. Mon cas d'utilisation, il suffit de m'liste tous les documents dans un petit index (général <200 éléments), ajoutant?size=1000
à la requête fait feu à droite vers le haut.Remarque la taille des param, ce qui augmente les résultats affichés par défaut (10) à 1000 par fragment.
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-from-size.html
max_result_window
elasticsearch(ES) prend en charge un GET ou un POST de demande pour l'obtention des données de l'ES cluster index.
Quand nous faire un GET:
Lorsque l'on fait un POST:
Je suggère d'utiliser une INTERFACE utilisateur plugin avec elasticsearch http://mobz.github.io/elasticsearch-head/
Cela vous aidera à obtenir une meilleure sensation des indices vous créez et testez aussi vos indices.
from
+size
ne peut pas être plus que leindex.max_result_window
index paramètre dont la valeur par défaut de 10 000La requête ci-dessous serait de retour le NO_OF_RESULTS vous souhaitez être retourné..
Maintenant, la question qui se pose ici est que vous voulez tous les enregistrements à renvoyer. Alors, naturellement, avant d'écrire une requête, vous ne saurez la valeur de NO_OF_RESULTS.
Comment savons-nous combien d'enregistrements existent dans votre document? Il suffit de taper la requête ci-dessous
Ce serait vous donner un résultat qui ressemble à celui ci-dessous
Le résultat total vous indique le nombre de données sont disponibles dans votre document. Donc, c'est une belle façon de connaître la valeur de NO_OF RÉSULTATS
De recherche tous les types de tous les indices
De recherche de tous types dans les foo indice
De recherche de tous types dans le toto1 et foo2 indices
De recherche de tous types dans tous les indices de début avec f
Types de recherche de l'utilisateur et de tweet dans tous les indices
C'est la meilleure solution que j'ai trouvé à l'aide de python client
https://gist.github.com/drorata/146ce50807d16fd4a6aa
À l'aide de java client
https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search-scrolling.html
elasticsearch_dsl==5.4.0
et il fonctionne sanssearch_type = 'scan',
.size=10000
, à quelque part, du 5 au 7 itérations. avecstatus=127
,main ERROR Null object returned for RollingFile in Appenders
,main ERROR Unable to locate appender "rolling" for logger config "root"
Pas de journaux dans/var/log/elasticsearch/elasticsearch.log
scan
des aides qui ne le rouleau sous le capot (depuis la version 5.x.x au leat)search_type = 'scan'
est obsolète. Le même code fonctionne sans que, bien qu'il existe quelques différences intéressantes qui sont bien enterré dans le vieux de la documentation. élastique.co/guide/fr/elasticsearch/de référence/1.4/... En particulier, lors de la migration de ne pas utiliser search_type=scan, qui est le premier de la "recherche" de la requête qui va venir avec le premier lot de résultats pour les traiter.utilisation
server:9200/_stats
également d'obtenir des statistiques sur tous vos alias.. comme la taille et le nombre d'éléments par alias, c'est très utile et fournit des informations utilesSi vous voulez tirer plusieurs milliers de dossiers, puis... un peu de gens ont donné la bonne réponse de à l'aide de défilement (Note: Certaines personnes ont aussi suggéré d'utiliser "search_type=scan". C'était obsolète, et en v5.0 supprimées. Vous n'en avez pas besoin)
Commencer avec une "recherche" de la requête, mais la spécification d'un défilement de paramètre (ici, je suis à l'aide d'une 1 minute de délai d'attente):
Qui comprend votre première "batch" de hits. Mais nous ne sommes pas fait ici. La sortie de la ci-dessus commande curl serait quelque chose comme ceci:
Il est important d'avoir _scroll_id à portée de main car ensuite, vous devez exécuter la commande suivante:
Cependant, le passage de la scroll_id autour n'est pas quelque chose conçu pour être effectué manuellement. Votre meilleur pari est d'écrire le code pour le faire. par exemple en java:
Désormais en BOUCLE sur la dernière commande utiliser SearchResponse pour extraire les données.
Simple! Vous pouvez utiliser
size
etfrom
paramètre!que vous modifiez la
from
progressivement jusqu'à ce que vous obtenez toutes les données.from
+size
ne peut pas être plus que l'indice.max_result_window index paramètre dont la valeur par défaut de 10 000Elasticsearch obtiendrez significative de plus si vous venez d'ajouter un peu de grand nombre que la taille, la méthode à utiliser pour obtenir tous les documents à l'aide d'analyse et de défilement id.
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html
search_type=scan
est maintenant obsolète. Donc, vous devez retirer, mais le comportement a changé un peu. Le premier lot de données de revient de la recherche initiale d'appel. Le lien que vous fournissez ne montrer la bonne façon de le faire.La meilleure façon de régler la taille à l'aide de la taille de l'=nombre en face de l'URL
Remarque: la valeur maximale qui peut être défini dans cette taille est de 10000. Pour toute valeur au-dessus de dix mille il attend de vous que vous utilisez les fonctions de défilement qui permettrait de minimiser les risques d'impacts sur les performances.
http://localhost:9200/foo/_search/?taille=1000&jolie=1
vous aurez besoin de spécifier la taille de la requête de paramètre par défaut est de 10
Vous pouvez utiliser le
_count
API pour obtenir la valeur de lasize
paramètre:Retourne
{count:X, ...}
. Extraire de la valeur " X " et ensuite faire la requête:taille param augmente les résultats affichés à partir de la valeur par défaut(10) à 500.
Changer le de étape par étape pour obtenir toutes les données.
Pour Elasticsearch 6.x
Demande:
GET /foo/_search?pretty=true
Réponse: En Hits-> total, donner le nombre de docs
Par défaut Elasticsearch retour 10 dossiers de taille doit être prévu expressément.
Ajouter la taille avec une demande pour obtenir désir certain nombre de dossiers.
http://{host}:9200/{index_name}/_search?jolie=true&size=(nombre de dossiers)
Note :
Max taille de la page ne peut pas être plus que l'indice.max_result_window index paramètre dont la valeur par défaut de 10 000.
La documentation officielle fournit la réponse à cette question! vous pouvez le trouver ici.
Il vous suffit de remplacer la taille (1) avec le nombre de résultats que vous voulez voir!
De Kibana DevTools son:
Le maximum de résultat, qui sera de retour en elasticSearch est 10000 en fournissant la taille
Après cela, vous devez utiliser le Défilement de l'API pour obtenir le résultat et obtenir le _scroll_id valeur et de mettre cette valeur dans scroll_id
De retourner tous les enregistrements à partir de tous les indices que vous pouvez faire:
curl -XGET http://35.195.120.21:9200/_all/_search?size=50&pretty
De sortie:
Aucun, à l'exception @Akira Sendoh a répondu à comment obtenir TOUS les docs. Mais même cette solution se bloque mon ES 6.3 service sans journaux. La seule chose qui a fonctionné pour moi, en utilisant le faible niveau
elasticsearch-py
bibliothèque a été par le biais de analyse helper qui utilisescroll()
api:Cependant, le moyen le plus propre de nos jours semble être dans
elasticsearch-dsl
de la bibliothèque, qui offre plus abstrait, plus propre des appels, des e.g: http://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html#hitsSi encore quelqu'un est à la recherche de toutes les données récupérées à partir d'Elasticsearch comme moi, pour certains usecases, voici ce que j'ai fait. En outre, toutes les données, tous les indices et tous les autres types de documents. J'utilise Elasticsearch 6.3
Elasticsearch référence
Une solution simple en utilisant le paquet python elasticsearch-dsl:
Voir aussi https://elasticsearch-dsl.readthedocs.io/en/latest/api.html#elasticsearch_dsl.Search.scan .
c'est la requête pour accomplir ce que vous voulez,
(Je suggère d'utiliser Kibana, car elle aide à comprendre les requêtes de mieux en mieux)
pour obtenir tous les enregistrements que vous avez à utiliser "match_all de la requête".
est la taille de l'absence de dossiers que vous souhaitez récupérer (sorte de limite).
par défaut, ES retournera seulement les 10 enregistrements
est comme sauter, sauter les 3 premiers enregistrements.
Si vous voulez vous procurer exactement tous les enregistrements, il suffit d'utiliser la valeur de "total" champ
à partir du résultat une fois que vous frappez cette requête à partir de Kibana et l'utiliser avec "taille".
Vous pouvez utiliser la taille=0 pour revenir tous les documents
exemple