Ricerca elastica: come visualizzare i dati indicizzati


102

Ho avuto un problema con ElasticSearch e Rails, dove alcuni dati non erano indicizzati correttamente a causa di attr_protected. Dove memorizza Elastic Search i dati indicizzati? Sarebbe utile verificare se i dati indicizzati effettivi sono errati.

Controllare la mappatura con Tire.index('models').mappingnon aiuta, il campo è elencato.

Risposte:


171

Probabilmente il modo più semplice per esplorare il tuo cluster ElasticSearch è usare elasticsearch-head .

Puoi installarlo facendo:

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

Quindi (supponendo che ElasticSearch sia già in esecuzione sul tuo computer locale), apri una finestra del browser per:

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

In alternativa, puoi semplicemente usare curldalla riga di comando, ad esempio:

Controlla la mappatura per un indice:

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

Ottieni alcuni documenti di esempio:

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

Visualizza i termini effettivi memorizzati in un particolare campo (ovvero come quel campo è stato analizzato):

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

Ulteriori informazioni disponibili qui: http://www.elasticsearch.org/guide

AGGIORNAMENTO: plug-in Sense in Marvel

Il modo di gran lunga più semplice per scrivere curlcomandi in stile per Elasticsearch è il plugin Sense in Marvel .

Viene fornito con l'evidenziazione della fonte, un bel rientro e il completamento automatico.

Nota: Sense era originariamente un plug-in di Chrome autonomo, ma ora fa parte del progetto Marvel .


1
Nel caso come quello di Robin, penso che sia sufficiente ispezionare i dati con curl curl localhost:9200/my_index/_search?q=*&pretty, supponendo che nell'indice ci sia un set limitato di documenti.
karmi

2
Grazie per aver consigliato il plug-in Sense. Sembra grandioso.
Venkatesh Nannan

Il plug-in Sense per Chrome è ottimo per l'utilizzo dell'API REST. e _head è utile per il controllo!
Haywire


Grazie, è stato davvero utile. A proposito, la sintassi è ./bin/plugin install mobz / elasticsearch-head. cioè non hai bisogno del trattino davanti all'installazione.
Paul Bartlett

40

In assoluto il modo più semplice per vedere i tuoi dati indicizzati è visualizzarli nel tuo browser. Nessun download o installazione necessari.

Presumo che il tuo host elasticsearch lo sia http://127.0.0.1:9200.

Passo 1

Vai a http://127.0.0.1:9200/_cat/indices?vper elencare i tuoi indici. Vedrai qualcosa del genere:

inserisci qui la descrizione dell'immagine

Passo 2

Prova ad accedere all'indice desiderato: http://127.0.0.1:9200/products_development_20160517164519304

L'output sarà simile a questo:

inserisci qui la descrizione dell'immagine

Notare il aliases, il che significa che possiamo anche accedere all'indice su: http://127.0.0.1:9200/products_development

Passaggio 3

Vai a http://127.0.0.1:9200/products_development/_search?prettyper visualizzare i tuoi dati:

inserisci qui la descrizione dell'immagine


3
Grazie Jan, è proprio quello che stavo cercando.
ZedTuX

Ho solo una domanda, http://127.0.0.1:9200/products_development/_search?pretty=1mostra solo dati di esempio? non sembra mostrare tutti i dati
svelandiag

1
I documenti qui affermano che i risultati della ricerca vengono impostati per impostazione predefinita sui primi 10 documenti (cercare hits.hits)
Jan Klimo

8
Questo non mostra affatto i dati indicizzati. Mostra solo i dati di origine, la stessa cosa che hai inserito. Non risponde alla domanda degli OP.
hackel

1
? abbastanza è abbastanza, non c'è bisogno di aggiungere "= 1"
Shai Alon


5

Soluzione di aggregazione

Risolvere il problema raggruppando i dati: la risposta di DrTech ha utilizzato sfaccettature nella gestione di questo, ma sarà deprecato in base al riferimento Elasticsearch 1.0.

Warning

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

Le sfaccettature sono sostituite da aggregati - Introdotti in modo accessibile nella Guida Elasticsearch - che carica un esempio nel senso. .

Soluzione breve

La soluzione è la stessa eccetto che le aggregazioni richiedono aggsinvece di facetse con un conteggio pari a 0 che imposta il limite al numero intero massimo : il codice di esempio richiede il 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
            }
        }
    }
}

Soluzione completa

Ecco il codice Sense per testarlo: esempio di indice di case, con un tipo di occupante e 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
            }
        }
    }
}

Risposta

Risposta che mostra il codice di aggregazione pertinente. Con due chiavi nell'indice, John e Mark.

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

4

Uno strumento che mi aiuta molto a eseguire il debug di ElasticSearch è ElasticHQ . Fondamentalmente, è un file HTML con un po 'di JavaScript. Non è necessario installarlo da nessuna parte, figuriamoci in ES stesso: basta scaricarlo, decomprimere int e aprire il file HTML con un browser.

Non sono sicuro che sia lo strumento migliore per gli utenti pesanti ES. Tuttavia, è davvero pratico per chi ha fretta di vedere le voci.



1

Seguendo l'esempio di @JanKlimo, sul terminale tutto ciò che devi fare è:

per vedere tutto l'indice: $ curl -XGET 'http://127.0.0.1:9200/_cat/indices?v'

per vedere il contenuto dell'indice products_development_20160517164519304: $ curl -XGET 'http://127.0.0.1:9200/products_development_20160517164519304/_search?pretty=1'


1

Anche Kibana è una buona soluzione. È una piattaforma di visualizzazione dati per Elastic, se installata funziona di default sulla porta 5601.

Tra le tante cose che fornisce. Ha "Dev Tools" dove possiamo fare il tuo debug.

Ad esempio puoi controllare i tuoi indici disponibili qui usando il comando

GET /_cat/indices
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.