2016-05-11 7 views
0

Ich möchte elastische Suchform Abfragen verwenden, die gut mit Feder-Daten-Es bisher funktionieren. Das Problem ist, wenn der Index von meiner Java-Anwendung erstellen die automatische Zuordnung wie folgt aussieht:Custom Mapping Federdaten ElasticSearch

"shape" : { 
    "properties" : { 
     "coordinates" : { 
      "type" : "double" 
     }, 
     "type" : { 
      "type" : "string" 
     } 
    } 
} 

So ist es nur Indizes alle meine Koordinaten als Doppel Array, während ich dies benötigen:

"shape": { 
    "type": "geo_shape", 
    "tree": "quadtree", 
    "precision": "5m" 
} 

So. Wie implementiert man ein benutzerdefiniertes Mapping? Es gibt eine Anmerkung mit dem Namen @GeoPointField, die ein GeoPoint-Mapping erstellt. Das sieht nicht so kompliziert aus, also sollte das selbst nicht zu viel Problem sein, aber ich kann die Implementierung für die Annotation nicht finden und so bin ich irgendwie festgefahren. Auch ok wäre zu verwenden: ElasticSearchTemplate.putMapping(indexName, type, mapping), aber ich kann nicht finden, was in Mapping als Type Object zu setzen.

Antwort

1

Ich habe vor einer Weile das exakt gleiche Problem kennengelernt und das Problem ist, dass Spring Data ES (Stand: 11. Mai 2016) keine Geo-Shapes unterstützt. Wie in DATAES-169 gesehen werden kann, hat das Problem noch nicht viel Traktion bekommen.

Aus diesem Grund habe ich forked the official spring-data-elasticsearch Repository und beschlossen, es selbst zu implementieren.

Ich habe es für Polygone und Kreise funktioniert, aber ich habe meinen Code noch nicht gedrängt. Ich beabsichtige, alle Formen zu unterstützen, bevor ich eine PR dränge und einreiche. Bleiben Sie dran ...

+0

Indexierung und Abfrage ist kein Problem. Ich kann das Mapping einfach nicht zum Laufen bringen. Wenn ich den Index selbst mit dem richtigen Mapping erstelle, funktionieren alle räumlichen Abfragen. Meine einzige Eigenschaft in der Klasse ist dies: '' 'private GeoJsonObject Form;' '' Die Abhängigkeit dafür ist '' 'de.grundid.opendatalab: geojson-jackson: 1.5.1'''. vielleicht macht das dein Leben einfacher. –

+0

Ja, das ist genau der Punkt. Wenn Sie Spring Data-Entitäten verwenden und erwarten, dass sie richtige 'geo_shape'-Feldzuordnungen erstellen, funktioniert sie nicht so wie sie sind. Änderungen müssen in 'org.springframework.data.elasticsearch.core.MappingBuilder' (unter anderem) vorgenommen werden. Wenn Sie 'ElasticSearchTemplate.putMapping()' verwenden, um Ihre 'geo_shape' - Zuordnung zu starten, riskieren Sie, dass Spring Data versucht, eine in Konflikt stehende Feldzuordnung zu erstellen (da es nichts über' geo_shape' weiß). – Val

+0

putMapping wäre eine schmutzige Arbeit. Momentan erstelle ich den Index über ein Shell-Skript und alles funktioniert einwandfrei. Ich kann Polygone, Multipolygone und Punkte ohne Probleme über repository.save() in den Index einfügen und mit GeoShapeQueryBuilder kann ich sie verwenden, um Daten zu erhalten. Die einzige Sache, die ich vermisse, ist eine Annotation, die Frühling zur Erstellungszeit angibt, um diese Zuordnung zu verwenden. –

Verwandte Themen