2016-06-26 3 views
0

arbeitet Ich habe folgende Abbildung in Elasticsearch 2,2Elasticsearch Geomapping mit PHP nicht

"clinics" : { 
    "mappings" : { 
     "clinic" : { 
     "properties" : { 
      "address_1" : { 
      "type" : "string", 
      "analyzer" : "standard" 
      }, 
      "city" : { 
      "type" : "string" 
      }, 
      "country" : { 
      "type" : "string" 
      }, 
      "id" : { 
      "type" : "long" 
      }, 
      "location" : { 
      "type" : "geo_point" 
      }, 
      "name" : { 
      "type" : "string", 
      "analyzer" : "standard" 
      }, 
      "state" : { 
      "type" : "string" 
      }, 
      "zipcode" : { 
      "type" : "string", 
      "analyzer" : "standard" 
      } 
     } 
     } 
    } 
    }, 

Ich bin mit PHP mit Elastiquent5 den Index hinzuzufügen. mein toArray() ist:

public function toArray() 
{ 
    $array = parent::toArray(); 
    $object = new \stdClass(); 
    $object->lat = $array['latitude']; 
    $object->lon = $array['longitude']; 
    $array['location'] = $object; 
    return $array; 
} 

Wenn ich versuche, den Artikel der Index i die folgende Fehlermeldung hinzuzufügen:

{"error":{"root_cause":[{"type":"remote_transport_exception","reason":"[Solarman][10.0.2.15:9300][indices:data/write/index[p]]"}],"type":"illegal_argument_exception","reason":"[location] is defined as an object in mapping [clinics] but this name is already used for a field in other types"},"status":400} 

im JSON-Format es richtig, in PHP-Array ergibt es ist:

array:10 [ 
    "name" => "Clinic A" 
    "address_1" => "123 Main St" 
    "city" => "NY" 
    "state" => "NY" 
    "zipcode" => "11111" 
    "country" => "US" 
    "id" => 6968 
    "location" => {#526 
    +"lat": 45.2116373 
    +"lon": -72.1891546 
    } 
] 

Wenn ich dies manuell json_encode und verwenden sie die curl -XPUT 'http://localhost:9200' -d ''

es durchgeht - aber das PHP tut nicht. Irgendeine Idee, wo ich falsch gelaufen bin?

Klärung Mein Ziel ist die einzufügen koordiniert, dass meine Modelldaten innerhalb des Index zu dem Standortfeld abzubilden sind zu extrahieren, da ich schon als geo_point Art gestaltet, wie durch meinen Mapping definiert

ich nicht Ich möchte ein neues Feld benennen, um dies zu lösen. Sekundäre Anmerkung: Wie ich bereits erwähnt habe, wird ein Put mit dem JSON erfolgreich aber nicht als PHP-Objekt mit den PHP-Treibern für die elastische Suche ergeben, die den Fehler bei der Erstellung des Dokuments

Antwort

0

Wie in der Fehlermeldung erwähnt [location] ist als Objekt in der Zuordnung definiert [clinics], aber dieser Name wird bereits für ein Feld in properties verwendet. Das Ändern des Variablennamens wie folgt funktioniert möglicherweise.

public function toArray() 
{ 
    $array = parent::toArray(); 
    $object = new \stdClass(); 
    $object->lat = $array['latitude']; 
    $object->lon = $array['longitude']; 
    $array['location_ob'] = $object; 
    return $array; 
} 
+0

können Sie mir in diesem Thread helfen? http://stackoverflow.com/questions/38043254/no-alive-nodes-found-in-your-cluster-elasticsearch – mostafaznv

+0

Was ich tun möchte, ist, um Lage-Karte zu den Daten zu machen. Also, was Ihre Lösung für ein neues Feld vorschlagen, das ist nicht was ich will. Ich möchte, dass das Standortobjekt in das Mapping des Feldes eingefügt wird, das ich angegeben habe, da ich es als einen geo_point brauche, was ich als – azngunit81

+0

bezeichnet habe. Ja, meine Lösung schlägt vor, ein neues Feld zu verwenden. Leider bin ich nicht sicher, wie man Ihre Anforderung ausarbeitet. –

Verwandte Themen