webentwicklung-frage-antwort-db.com.de

Erstellen oder aktualisieren Sie das Mapping in elasticsearch

Ich bin neu bei Elasticsearch und arbeite derzeit an der Implementierung eines geo_distance - Filters für die Suche. Ab sofort hat mein Index die folgende Zuordnung (ich habe einige Felder entfernt):

{
advert_index: {
   mappings: {
      advert_type: {
         properties: {
            __v: {
               type: "long"
            },
            caption: {
               type: "string"
            },
            category: {
               type: "string"
            },
            **location: {
            type: "long"
            },**

         }
      }
   }
}

Das Feld "geo_distance" wird im Feld "location" implementiert. Eine Beispielinstanz sieht folgendermaßen aus:

"location": [
               71,
               60
            ],

Das heißt ist im geoJSON-Format [lon, lat].

Ich verstehe, dass ich meinen Index aktualisieren muss, damit das Standortfeld vom Typ geo_point Ist, wie in der Dokumentation beschrieben ( Mapping-Geo-Point ). Es scheint, als müsste ich den Index löschen und einen neuen erstellen, aber ich kann das nicht.

Bin ich auf dem richtigen Weg? Ich würde mich sehr freuen, wenn mir jemand dabei helfen könnte, einen neuen Index zu erstellen oder meinen vorhandenen Index mit dem richtigen Datentyp zu aktualisieren.

Danke vielmals!

48
Axelfran

Im Allgemeinen können Sie Ihre Indexzuordnung mit der API put mapping aktualisieren (Referenz hier ):

curl -XPUT 'http://localhost:9200/advert_index/_mapping/advert_type' -d '
{
    "advert_type" : {
        "properties" : {

          //your new mapping properties

        }
    }
}
'

Dies ist besonders nützlich, um neue Felder hinzuzufügen. In Ihrem Fall werden Sie jedoch versuchen, den Standorttyp zu ändern. Dies führt zu einem Konflikt und verhindert, dass die neue Zuordnung verwendet wird.

Sie können die API put mapping verwenden, um eine weitere Eigenschaft hinzuzufügen, die den Speicherort als Lat/Lon-Array enthält, die vorherige kann jedoch nicht aktualisiert werden Standortfeld selbst.

Schließlich müssen Sie Ihre Daten neu indizieren, damit Ihre neue Zuordnung berücksichtigt wird.

Die beste Lösung wäre wirklich, einen neuen Index zu erstellen .

Wenn Ihr Problem bei der Erstellung eines weiteren Indexes in Ausfallzeiten besteht, sollten Sie sich Aliase ansehen, um einen reibungslosen Ablauf zu gewährleisten.

62
ThomasC

Bitte beachten Sie, dass die in dieser Antwort angegebene URL einen Fehler enthält:

Bei einer PUT-Zuordnungsanforderung sollte die URL folgendermaßen lauten:

http: // localhost: 9200/name_of_index/_mappings/document_type

und nicht

http: // localhost: 9200/name_of_index/document_type/_mappings

6
user2076066