Elastische Suche: Anzeigen der indizierten Daten

102

Ich hatte ein Problem mit ElasticSearch und Rails, bei dem einige Daten aufgrund von attr_protected nicht richtig indiziert wurden. Wo speichert Elastic Search die indizierten Daten? Es wäre nützlich zu überprüfen, ob die tatsächlich indizierten Daten falsch sind.

Das Überprüfen der Zuordnung mit Tire.index('models').mappinghilft nicht, das Feld wird aufgelistet.

Robin
quelle

Antworten:

170

Der wahrscheinlich einfachste Weg, Ihren ElasticSearch-Cluster zu erkunden, ist die Verwendung von elasticsearch-head .

Sie können es installieren, indem Sie Folgendes tun:

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

Öffnen Sie dann (vorausgesetzt, ElasticSearch wird bereits auf Ihrem lokalen Computer ausgeführt) ein Browserfenster, um:

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

Alternativ können Sie einfach curlüber die Befehlszeile verwenden, z.

Überprüfen Sie die Zuordnung auf einen Index:

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

Holen Sie sich einige Beispieldokumente:

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

Sehen Sie sich die tatsächlichen Begriffe an, die in einem bestimmten Feld gespeichert sind (dh wie dieses Feld analysiert wurde):

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

Weitere finden Sie hier: http://www.elasticsearch.org/guide

UPDATE: Sense Plugin in Marvel

Die mit Abstand einfachste Art, curlBefehle im Stil von Elasticsearch zu schreiben, ist das Sense-Plugin in Marvel .

Es kommt mit Quellenhervorhebung, ziemlich Einrückung und automatischer Vervollständigung.

Hinweis: Sense war ursprünglich ein eigenständiges Chrome-Plugin, ist jetzt jedoch Teil des Marvel-Projekts .

DrTech
quelle
1
In dem Fall wie bei Robin reicht es meiner Meinung nach aus, die Daten nur mit Curl zu untersuchen curl localhost:9200/my_index/_search?q=*&pretty- vorausgesetzt, der Index enthält nur eine begrenzte Anzahl von Dokumenten.
Karmi
2
Vielen Dank, dass Sie das Sense-Plugin empfohlen haben. Das sieht großartig aus.
Venkatesh Nannan
Das Sense-Plugin für Chrome eignet sich hervorragend für die Verwendung der REST-API. und _head ist nett zu Überprüfungszwecken!
Haywire
Danke das war wirklich nützlich. Übrigens lautet die Syntax ./bin/plugin install mobz / elasticsearch-head. dh Sie brauchen den Bindestrich vor der Installation nicht.
Paul Bartlett
40

Der einfachste Weg, Ihre indizierten Daten zu sehen, besteht darin, sie in Ihrem Browser anzuzeigen. Keine Downloads oder Installation erforderlich.

Ich gehe davon aus, dass Ihr Elasticsearch-Host ist http://127.0.0.1:9200.

Schritt 1

Navigieren Sie zu, http://127.0.0.1:9200/_cat/indices?vum Ihre Indizes aufzulisten. Sie werden so etwas sehen:

Geben Sie hier die Bildbeschreibung ein

Schritt 2

Versuchen Sie, auf den gewünschten Index zuzugreifen: http://127.0.0.1:9200/products_development_20160517164519304

Die Ausgabe sieht ungefähr so ​​aus:

Geben Sie hier die Bildbeschreibung ein

Beachten Sie das aliases, was bedeutet, dass wir auch auf den Index zugreifen können unter: http://127.0.0.1:9200/products_development

Schritt 3

Navigieren Sie zu http://127.0.0.1:9200/products_development/_search?pretty, um Ihre Daten anzuzeigen :

Geben Sie hier die Bildbeschreibung ein

Jan Klimo
quelle
3
Danke Jan, es ist genau das, wonach ich gesucht habe.
ZedTuX
Ich habe nur eine Frage, zeigt http://127.0.0.1:9200/products_development/_search?pretty=1nur Beispieldaten? es scheint nicht alle Daten zu zeigen
svelandiag
1
Die Dokumente hier geben an, dass die Suchergebnisse standardmäßig die ersten 10 Dokumente enthalten (suchen hits.hits)
Jan Klimo
8
Dies zeigt die indizierten Daten überhaupt nicht an. Es werden nur Ihre Quelldaten angezeigt - genau das, was Sie eingegeben haben. Beantwortet die Frage des OP nicht.
Hackel
1
? hübsch ist genug, keine Notwendigkeit, "= 1" hinzuzufügen
Shai Alon
5

Aggregationslösung

Lösen des Problems durch Gruppieren der Daten - Die Antwort von DrTech verwendete Facetten bei der Verwaltung, wird jedoch gemäß der Referenz zu Elasticsearch 1.0 nicht mehr unterstützt.

Warning

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

Facetten werden durch Aggregate ersetzt - im Elasticsearch-Handbuch auf zugängliche Weise eingeführt -, die ein Beispiel in den Sinn laden. .

Kurze Lösung

Die Lösung ist das gleiche , außer Aggregationen erfordern , aggsstatt facetsund mit einer Zählung , die von 0 bis max Grenze setzt integer - das Beispiel Code erfordert das Marvel Plugin

# 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
            }
        }
    }
}

Vollständige Lösung

Hier ist der Sense-Code zum Testen - Beispiel eines Hausindex mit einem Belegertyp und einem Feld Vorname:

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
            }
        }
    }
}

Antwort

Antwort mit dem relevanten Aggregationscode. Mit zwei Schlüsseln im Index, John und Mark.

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

Ein Tool, das mir beim Debuggen von ElasticSearch sehr hilft, ist ElasticHQ . Grundsätzlich handelt es sich um eine HTML-Datei mit etwas JavaScript. Sie müssen nirgendwo installieren, geschweige denn in ES selbst: Laden Sie es einfach herunter, entpacken Sie int und öffnen Sie die HTML-Datei mit einem Browser.

Ich bin mir nicht sicher, ob es das beste Tool für ES-Benutzer ist. Für jeden, der es eilig hat, ist es jedoch sehr praktisch, die Einträge zu sehen.

brandizzi
quelle
1

Nach dem Beispiel von @JanKlimo müssen Sie auf dem Terminal lediglich Folgendes tun:

um den gesamten Index zu sehen: $ curl -XGET 'http://127.0.0.1:9200/_cat/indices?v'

um den Inhalt des Index zu sehen products_development_20160517164519304: $ curl -XGET 'http://127.0.0.1:9200/products_development_20160517164519304/_search?pretty=1'

koolhead17
quelle
1

Kibana ist auch eine gute Lösung. Es ist eine Datenvisualisierungsplattform für Elastic. Wenn sie installiert ist, wird sie standardmäßig auf Port 5601 ausgeführt.

Aus den vielen Dingen, die es bietet. Es hat "Dev Tools", wo wir Ihr Debugging durchführen können.

Beispielsweise können Sie hier Ihre verfügbaren Indizes mit dem Befehl überprüfen

GET /_cat/indices
gd vigneshwar
quelle