Elastic Search: cómo ver los datos indexados

102

Tuve un problema con ElasticSearch y Rails, donde algunos datos no se indexaron correctamente debido a attr_protected. ¿Dónde almacena Elastic Search los datos indexados? Sería útil comprobar si los datos indexados reales son incorrectos.

Verificar el mapeo con Tire.index('models').mappingno ayuda, el campo está listado.

Robin
fuente

Respuestas:

170

Probablemente, la forma más fácil de explorar su clúster de ElasticSearch es usar elasticsearch-head .

Puede instalarlo haciendo:

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

Luego (asumiendo que ElasticSearch ya se está ejecutando en su máquina local), abra una ventana del navegador para:

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

Alternativamente, puede usar curldesde la línea de comando, por ejemplo:

Verifique el mapeo para un índice:

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

Obtenga algunos documentos de muestra:

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

Vea los términos reales almacenados en un campo en particular (es decir, cómo se ha analizado ese campo):

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

Más disponible aquí: http://www.elasticsearch.org/guide

ACTUALIZACIÓN: Complemento Sense en Marvel

Con mucho, la forma más fácil de escribir curlcomandos de estilo para Elasticsearch es el complemento Sense en Marvel .

Viene con resaltado de fuente, bastante sangría y autocompletado.

Nota: Sense era originalmente un complemento de Chrome independiente, pero ahora es parte del proyecto Marvel .

DrTech
fuente
1
En el caso como el de Robin, creo que basta con inspeccionar los datos con curl curl localhost:9200/my_index/_search?q=*&pretty, asumiendo que hay un conjunto limitado de documentos en el índice.
karmi
2
Gracias por recomendar el complemento Sense. Se ve genial.
Venkatesh Nannan
El complemento Sense para Chrome es ideal para usar la API REST. y _head es bueno para fines de verificación.
Haywire
Gracias, esto fue realmente útil. Por cierto, la sintaxis es ./bin/plugin install mobz / elasticsearch-head. es decir, no necesita el guión delante de la instalación.
Paul Bartlett
40

Absolutamente, la forma más fácil de ver sus datos indexados es verlos en su navegador. No se necesitan descargas ni instalación.

Supongo que su host de elasticsearch es http://127.0.0.1:9200.

Paso 1

Navegue hasta http://127.0.0.1:9200/_cat/indices?vpara listar sus índices. Verás algo como esto:

ingrese la descripción de la imagen aquí

Paso 2

Intente acceder al índice deseado: http://127.0.0.1:9200/products_development_20160517164519304

La salida se verá así:

ingrese la descripción de la imagen aquí

Observe el aliases, lo que significa que también podemos acceder al índice en: http://127.0.0.1:9200/products_development

Paso 3

Navega para http://127.0.0.1:9200/products_development/_search?prettyver tus datos:

ingrese la descripción de la imagen aquí

Jan Klimo
fuente
3
Gracias Jan, es justo lo que estaba buscando.
ZedTuX
Solo tengo una pregunta, ¿ http://127.0.0.1:9200/products_development/_search?pretty=1solo muestra datos de muestra? no parece mostrar todos los datos
svelandiag
1
Los documentos aquí indican que los resultados de búsqueda predeterminados son los primeros 10 documentos (buscar hits.hits)
Jan Klimo
8
Esto no muestra los datos indexados en absoluto. Solo muestra sus datos de origen, exactamente lo mismo que ingresó. No responde a la pregunta de OP.
hackel
1
? Pretty es suficiente, no es necesario agregar "= 1"
Shai Alon
5

Solución de agregación

Resolver el problema agrupando los datos: la respuesta de DrTech usó facetas para administrar esto, pero quedará en desuso de acuerdo con la referencia de Elasticsearch 1.0.

Warning

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

Las facetas se reemplazan por agregados, introducidos de manera accesible en la Guía de Elasticsearch, que carga un ejemplo en sentido. .

Solución corta

La solución es la misma, excepto que las agregaciones requieren en aggslugar de facetsy con un recuento de 0 que establece el límite al número entero máximo : el código de ejemplo requiere el complemento 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
            }
        }
    }
}

Solución completa

Aquí está el código Sense para probarlo: ejemplo de un índice de casas, con un tipo de ocupante y un campo 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
            }
        }
    }
}

Respuesta

Respuesta que muestra el código de agregación relevante. Con dos claves en el índice, John y Mark.

    ....
    "aggregations": {
      "indexed_occupier_names": {
         "buckets": [
            {
               "key": "john",     
               "doc_count": 2     <= 2 documents matching
            },                        
            {
               "key": "mark",
               "doc_count": 1     <= 1 document matching
            }
         ]
      }
   }
   ....
nota parche
fuente
4

Una herramienta que me ayuda mucho a depurar ElasticSearch es ElasticHQ . Básicamente, es un archivo HTML con algo de JavaScript. No es necesario instalarlo en ningún lugar, y mucho menos en ES: simplemente descárguelo, descomprima int y abra el archivo HTML con un navegador.

No estoy seguro de que sea la mejor herramienta para usuarios intensivos de ES. Sin embargo, es realmente práctico para quien tenga prisa por ver las entradas.

brandizzi
fuente
1

Siguiendo el ejemplo de @JanKlimo, en la terminal todo lo que tienes que hacer es:

para ver todo el Índice: $ curl -XGET 'http://127.0.0.1:9200/_cat/indices?v'

para ver el contenido del índice products_development_20160517164519304: $ curl -XGET 'http://127.0.0.1:9200/products_development_20160517164519304/_search?pretty=1'

koolhead17
fuente
1

Kibana también es una buena solución. Es una plataforma de visualización de datos para Elastic, si está instalada, se ejecuta por defecto en el puerto 5601.

De las muchas cosas que proporciona. Tiene "Herramientas de desarrollo" donde podemos hacer su depuración.

Por ejemplo, puede verificar sus índices disponibles aquí usando el comando

GET /_cat/indices
gd vigneshwar
fuente