Elastic Search: comment voir les données indexées

102

J'ai eu un problème avec ElasticSearch et Rails, où certaines données n'étaient pas indexées correctement à cause d'attr_protected. Où Elastic Search stocke-t-il les données indexées? Il serait utile de vérifier si les données indexées réelles sont erronées.

Vérifier le mappage avec Tire.index('models').mappingn'aide pas, le champ est répertorié.

Robin
la source

Réponses:

171

Le moyen le plus simple d'explorer votre cluster ElasticSearch est probablement d'utiliser elasticsearch-head .

Vous pouvez l'installer en faisant:

cd elasticsearch/
./bin/plugin -install mobz/elasticsearch-head

Ensuite (en supposant qu'ElasticSearch est déjà en cours d'exécution sur votre ordinateur local), ouvrez une fenêtre de navigateur pour:

http://localhost:9200/_plugin/head/

Alternativement, vous pouvez simplement utiliser à curlpartir de la ligne de commande, par exemple:

Vérifiez le mappage pour un index:

curl -XGET 'http://127.0.0.1:9200/my_index/_mapping?pretty=1' 

Obtenez des exemples de documents:

curl -XGET 'http://127.0.0.1:9200/my_index/_search?pretty=1' 

Voir les termes réels stockés dans un champ particulier (c'est-à-dire comment ce champ a été analysé):

curl -XGET 'http://127.0.0.1:9200/my_index/_search?pretty=1'  -d '
 {
    "facets" : {
       "my_terms" : {
          "terms" : {
             "size" : 50,
             "field" : "foo"
          }
       }
    }
 }

Plus d'informations disponibles ici: http://www.elasticsearch.org/guide

MISE À JOUR: plugin Sense dans Marvel

Le moyen de loin le plus simple d'écrire curldes commandes de style pour Elasticsearch est le plugin Sense de Marvel .

Il est livré avec une mise en évidence de la source, une jolie mise en retrait et une saisie semi-automatique.

Remarque: Sense était à l'origine un plugin Chrome autonome mais fait maintenant partie du projet Marvel .

DrTech
la source
1
Dans le cas comme celui de Robin, je pense qu'il suffit d'inspecter simplement les données avec curl curl localhost:9200/my_index/_search?q=*&pretty- en supposant qu'il existe un ensemble limité de documents dans l'index.
karmi
2
Merci d'avoir recommandé le plugin Sense. Cela semble très bien.
Venkatesh Nannan
Le plugin Sense pour Chrome est idéal pour utiliser l'API REST. et _head est agréable à des fins de vérification!
Haywire
Merci, c'était vraiment utile. Btw la syntaxe est ./bin/plugin install mobz / elasticsearch-head. c'est-à-dire que vous n'avez pas besoin du trait d'union devant l'installation.
Paul Bartlett
40

Le moyen le plus simple de voir vos données indexées est de les afficher dans votre navigateur. Aucun téléchargement ni installation requis.

Je vais supposer que votre hôte elasticsearch est http://127.0.0.1:9200.

Étape 1

Accédez à http://127.0.0.1:9200/_cat/indices?vpour répertorier vos indices. Vous verrez quelque chose comme ceci:

entrez la description de l'image ici

Étape 2

Essayez d'accéder à l'index souhaité: http://127.0.0.1:9200/products_development_20160517164519304

La sortie ressemblera à ceci:

entrez la description de l'image ici

Notez le aliases, ce qui signifie que nous pouvons également accéder à l'index à l'adresse: http://127.0.0.1:9200/products_development

Étape 3

Accédez à http://127.0.0.1:9200/products_development/_search?prettypour voir vos données:

entrez la description de l'image ici

Jan Klimo
la source
3
Merci Jan, c'est exactement ce que je cherchais.
ZedTuX
J'ai juste une question, ne http://127.0.0.1:9200/products_development/_search?pretty=1montre que des exemples de données? il ne semble pas montrer toutes les données
svelandiag
1
Les documents ici indiquent que les résultats de la recherche par défaut sont les 10 premiers documents (recherchez hits.hits)
Jan Klimo
8
Cela n'affiche pas du tout les données indexées. Il ne montre que vos données sources - exactement la même chose que vous avez mise. Ne répond pas à la question des OP.
hackel
1
? joli c'est assez, pas besoin d'ajouter "= 1"
Shai Alon
5

Solution d'agrégation

Résoudre le problème en regroupant les données - La réponse de DrTech a utilisé des facettes pour gérer cela, mais sera obsolète selon la référence Elasticsearch 1.0.

Warning

Facets are deprecated and will be removed in a future release. You are encouraged to
migrate to aggregations instead.

Les facettes sont remplacées par des agrégats - introduits de manière accessible dans le guide Elasticsearch - qui charge un exemple dans son sens. .

Solution courte

La solution est la même sauf que les agrégations nécessitent aggsau lieu de facetset avec un nombre de 0 qui définit la limite à un entier maximum - l'exemple de code nécessite le plugin Marvel

# Basic aggregation
GET /houses/occupier/_search?search_type=count
{
    "aggs" : {
        "indexed_occupier_names" : {    <= Whatever you want this to be
            "terms" : {
              "field" : "first_name",    <= Name of the field you want to aggregate
              "size" : 0
            }
        }
    }
}

Solution complète

Voici le code Sense pour le tester - exemple d'un index de maisons, avec un type d'occupant, et un champ first_name:

DELETE /houses

# Index example docs
POST /houses/occupier/_bulk
{ "index": {}}
{ "first_name": "john" }
{ "index": {}}
{ "first_name": "john" }
{ "index": {}}
{ "first_name": "mark" }


# Basic aggregation
GET /houses/occupier/_search?search_type=count
{
    "aggs" : {
        "indexed_occupier_names" : {
            "terms" : {
              "field" : "first_name",
              "size" : 0
            }
        }
    }
}

Réponse

Réponse indiquant le code d'agrégation pertinent. Avec deux clés dans l'index, John et Mark.

    ....
    "aggregations": {
      "indexed_occupier_names": {
         "buckets": [
            {
               "key": "john",     
               "doc_count": 2     <= 2 documents matching
            },                        
            {
               "key": "mark",
               "doc_count": 1     <= 1 document matching
            }
         ]
      }
   }
   ....
notapatch
la source
4

ElasticHQ est un outil qui m'aide beaucoup à déboguer ElasticSearch . Fondamentalement, il s'agit d'un fichier HTML avec du JavaScript. Pas besoin d'installer n'importe où, et encore moins dans ES lui-même: il suffit de le télécharger, de décompresser int et d'ouvrir le fichier HTML avec un navigateur.

Pas sûr que ce soit le meilleur outil pour les gros utilisateurs ES. Pourtant, c'est vraiment pratique pour quiconque est pressé de voir les entrées.

brandizzi
la source
1

En suivant l'exemple de @JanKlimo, sur le terminal, tout ce que vous avez à faire est:

pour voir tout l'index: $ curl -XGET 'http://127.0.0.1:9200/_cat/indices?v'

pour voir le contenu de l'index products_development_20160517164519304: $ curl -XGET 'http://127.0.0.1:9200/products_development_20160517164519304/_search?pretty=1'

koolhead17
la source
1

Kibana est également une bonne solution. Il s'agit d'une plateforme de visualisation de données pour Elastic, si elle est installée, elle s'exécute par défaut sur le port 5601.

Parmi les nombreuses choses qu'il fournit. Il a des "Dev Tools" où nous pouvons faire votre débogage.

Par exemple, vous pouvez vérifier vos index disponibles ici en utilisant la commande

GET /_cat/indices
gd vigneshwar
la source