2016-08-07 1 views
0

ich die Zusammenstellung eines Proof of Concept auf AWS mit Dynamo und den Amazon Elasticsearch Service, und ich einige Probleme mit immerGrund Geosearch mit Elasticsearch

ich das ES-Dashboard überprüft haben und die folgende sehen. ...

ich habe einen Index [Vermögen] und eine Zuordnung [asset_types]. Unten ist ein Beispiel von einigen der Zuordnungen, mit dem jeweiligen Standort

filename *string* 
checksum *string* 
added_date *date* 
General [this is a map] 
    location 
     lat *string* 
     lon *string* 
    make *string* 
    model *string* 

ich die geo Suche auf dem „General.location“ Feld sein wollen. Ich habe ein paar verschiedene Fragen bisher ohne Glück versucht, aber ich bin mir sicher, dass ich etwas ziemlich Offensichtliches vermisse.

Ein von der offiziellen Dokumentation ist here, an den unten verändert, die mit diesem Fehler führt: „Grund“: „erfolglose Suche Quelle analysieren unbekannt Suche Element [bool].“,

POST assets/_search 
{ 
    "bool" : { 
     "must" : { 
      "match_all" : {} 
     }, 
     "filter" : { 
      "geo_distance" : { 
       "distance" : "200km", 
       "General.location" : { 
        "lat" : 40, 
        "lon" : -70 
       } 
      } 
     } 
    } 
} 

I habe auch eine etwas andere Abfrage versucht, die ‚‘ Grund "aufwirft:‚failed geo_point Feld [General.location] finden‘

POST assets/_search 
{ 
    "filter" : { 
     "geo_distance" : { 
     "distance" : "1km", 
     "General.location" : { 
         "lat" : 40, 
         "lon" : -70 
        } 
     } 
    }, 
    "query" : { 
     "match_all" : {} 
    } 
} 

Bin ich läuft eine Abfrage falsch habe ich die Zuordnung in die aktualisieren müssen? Index zur Angabe des Geo -Index? Ich dachte, wenn ich Felder richtig formatierte, war das keine Voraussetzung.

Dank

Antwort

0

Das Problem liegt in der Abbildung, wo Ihr General.location Feld nicht richtig abgebildet wird. Das ist der Grund, warum Sie den Fehler failed to find geo_point field

Also statt

General [this is a map] 
    location 
     lat *string* 
     lon *string* 

Sie benötigen

General [this is a map] 
    location *geo_point* 
haben

So müssen Sie Ihre Zuordnung entsprechend ändern und Ihre Daten indizieren.

Das zweite Problem, das Sie haben, ist, dass Ihre erste Abfrage in einem query Abschnitt eingeschlossen werden muss:

POST assets/_search 
{ 
    "query" : { 
    "bool" : { 
     "must" : { 
      "match_all" : {} 
     }, 
     "filter" : { 
      "geo_distance" : { 
       "distance" : "200km", 
       "General.location" : { 
        "lat" : 40, 
        "lon" : -70 
       } 
      } 
     } 
    } 
    } 
} 

Sobald Sie beide Probleme behoben haben, werden Sie in der Lage sein, Ihre Abfrage erfolgreich auszuführen.

+0

Dank Val. Du hattest Recht. Ich hätte schwören können, dass ich gelesen habe, dass wenn du deine Eingabe im richtigen Format einrichtest, sie in einem geo_point lesen würde. Klingt so, als wäre das nicht der Fall. –

+0

Cool, froh, dass du es herausgefunden hast! – Val

0

Zusätzlich zu dem, was Val sagte, habe ich eine neue Zuordnung für den Standort

ich explizit eine Zuordnung für diese erstellt. Hinweis für Sie andere Novizen da draußen, ich brauchte geschachtelte Eigenschaften aktualisieren, um die "General.deviceLocation" zu erstellen. Nachdem ich das getan hatte, funktionierte Vals Update-Abfrage.

PUT assets/_mapping/assets_type 
{ 
    "properties": { 
    "General": { 
     "properties": { 
     "deviceLocation": { 
      "type": "geo_point" 
     } 
     } 
    }, 
    } 
} 
Verwandte Themen