2016-11-20 2 views
0

Ich bin Anfänger in ElasticSearch. Ich versuche zu testen, ob eine Liste von Geopoint (lat/long) in einer Liste von Geopoints existiert.Ich suche jemanden, der mir mit ElasticSearch hilft

Zum Beispiel gebe ich dieses GeoPoint:

"lat": 49.01536940596998 
"lon": 2.4967825412750244 

und ich möchte testen, ob dieser Punkt in der Liste existieren unten. Vielen Dank.

"positions": [ 
    { 
     "millis": 12959023, 
     "lat": 49.01525113731623, 
     "lon": 2.4971945118159056, 
     "rawX": -3754, 
     "rawY": 605, 
     "rawVx": 0, 
     "rawVy": 0, 
     "speed": 9.801029291617944, 
     "accel": 0.09442740907572084, 
     "grounded": true 
    }, 
    { 
     "millis": 12959914, 
     "lat": 49.01536940596998, 
     "lon": 2.4967825412750244, 
     "rawX": -3784, 
     "rawY": 619, 
     "rawVx": -15, 
     "rawVy": 7, 
     "speed": 10.841861737855924, 
     "accel": -0.09534648619563282, 
     "grounded": true 
    } 
... 
} 

Antwort

1

der Lage sein, in einer Reihe von Objekten zu suchen, müssen Sie die nested data type verwenden. Wie die verlinkte Seite erklärt, können Sie die Standard-Zuordnung nicht verwenden, um die internen Elemente des Arrays als unabhängig zu erhalten. Zuerst müssen Sie das Mapping aktualisieren.

Hinweis: Zuordnungen wirken sich nur auf neue Indizes aus. Reference.

PUT YOUR_INDEX 
{ 
    "mappings": { 
    "YOUR_TYPE": { 
     "properties": { 
     "positions": { 
      "type": "nested" 
     } 
     } 
    } 
    } 
} 

Jetzt können wir die Daten abfragen. Sie suchen nach einer bool query, die andere Abfragen kombiniert (in Ihrem Fall term queries).

POST _search 
{ 
    "query": { 
    "nested": { 
     "path": "positions", 
     "query": { 
     "bool" : { 
      "must" : [ 
      { "term" : { "lat": 49.01536940596998 } }, 
      { "term" : { "lon": 2.4967825412750244 } } 
      ] 
     } 
     } 
    } 
    } 
} 
+2

Da Sie das Mapping ändern, warum nicht ein 'geo_point' Feld für die lat/lon Werte zur gleichen Zeit einführen? – Val

+0

@fylie danke es funktioniert für uns, eigentlich arbeiten wir an einem großen Dokumenten mit einer Menge von Daten (Positionen) und wenn wir versuchen, diese Dokumente direkt aus Sense-Erweiterung hinzuzufügen Es blockiert, was ist die beste Lösung, um diese großen Daten hinzuzufügen zu elasticsearch und auch, wie man die Anfragezeit optimiert, weil es Zeit braucht, um Ergebnis zu erhalten. – Taybou

+0

@Val, Ich habe versucht, ein 'geo_point' Feld für die lat/lon Werte einzuführen, aber ich bekomme Fehler, mir zu sagen, dass ich das nicht tun konnte, weil Positionen aus vielen anderen Feldern bestehen – Taybou

Verwandte Themen