Recherche élastique: comment voir les données indexées

j'ai eu un problème avec ElasticSearch et Rails, où certaines données n'ont pas été indexées correctement en raison de attr_protected. Où la recherche élastique stocke-t-elle les données indexées? Il serait utile de vérifier si les données indexées est faux.

vérifier la correspondance avec Tire.index('models').mapping n'aide pas, le champ est listé.

89
demandé sur Robin 2012-01-21 20:52:58

7 réponses

probablement la façon la plus facile d'explorer votre cluster ElasticSearch est d'utiliser elasticsearch-head .

Vous pouvez l'installer en faisant:

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

ensuite (en supposant que ElasticSearch est déjà en cours d'exécution sur votre machine locale), ouvrez une fenêtre de navigateur à:

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

alternativement, vous pouvez juste utiliser curl de la ligne de commande, par exemple:

vérifier la cartographie pour un index:

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

Obtenir quelques 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 disponible ici: http://www.elasticsearch.org/guide

mise à jour: plugin sens dans Marvel

de loin la la manière la plus facile d'écrire les commandes curl pour Elasticsearch est le plugin sens dans Marvel .

il est livré avec la mise en évidence de la source, assez indent et autocomplete.

Note: Sense était à l'origine un plugin de chrome autonome, mais fait maintenant partie du projet Marvel .

161
répondu DrTech 2014-06-29 13:59:24

Absolument la meilleure façon de voir vos données indexées est pour l'afficher dans votre navigateur. Aucun téléchargement ou installation nécessaire.

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

Étape 1

naviguez vers http://127.0.0.1:9200/_cat/indices?v pour lister vos indices. Vous verrez quelque chose comme ceci:

enter image description here

Étape 2

essayez d'accéder à l'index désiré: http://127.0.0.1:9200/products_development_20160517164519304

la sortie ressemblera à quelque chose comme ceci:

enter image description here

Notez le aliases , ce qui signifie que nous pouvons aussi bien Accéder à l'index à: http://127.0.0.1:9200/products_development

Étape 3

http://127.0.0.1:9200/products_development/_search?pretty=1 pour voir vos données:

enter image description here

26
répondu Jan Klimo 2016-05-17 10:41:26

ElasticSearch le navigateur de données

recherche, graphiques, configuration en un clic....

10
répondu Oleg 2012-12-07 11:10:01

Agrégation Solution

résoudre le problème en groupant les données - la réponse de DrTech facettes utilisées dans la gestion de ce, mais, sera déprécié 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 d'une manière accessible dans le guide Elasticsearch - qui chargent un exemple dans le sens. .

Solution Courte

la solution est la même sauf les agrégations exigent aggs au lieu de facets et avec un compte de 0 qui fixe la limite à l'entier max - le code d'exemple exige 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 sens 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
            }
         ]
      }
   }
   ....
5
répondu not a patch 2017-01-31 14:50:23

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

pas sûr que ce soit le meilleur outil pour les utilisateurs lourds. Pourtant, c'est vraiment pratique pour celui qui est pressé de voir les entrées.

4
répondu brandizzi 2016-03-15 19:11:17

si vous utilisez Google Chrome alors vous pouvez simplement utiliser cette extension nommée as Sense il s'agit également d'un outil si vous utilisez Marvel.

https://chrome.google.com/webstore/detail/sense-beta/lhjgkmllcaadmopgmanpapmpjgmfcfig

1
répondu Sudhanshu Gaur 2016-07-30 13:51:46

suivant L'exemple de @JanKlimo, sur terminal Tout ce que vous avez à faire est:

pour voir tous les indices: $ curl -XGET 'http://127.0.0.1:9200/_cat/indices?v'

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

1
répondu koolhead17 2017-01-25 01:25:23