2017-08-08 1 views
1

Ich verwende elasticsearch mit php und ich möchte suchen mit Geo Entfernung Abfrage hinzufügen, aber nach ein paar Artikel auf Google zu lesen Ich habe geo location in meinem aktuellen indizierten Code hinzufügen, aber keine Ahnung bekommen, wie man hinzufügen.Wie geo Lage in Elasticsearch Index

$indexed = $client->index([ 
    'index' => 'users', 
    'type' => 'user', 
    'body' => [ 
     'name' => $name, 
     'email' => $email, 
     'company' => $company, 
     'phone' => $phone, 
     'streetAddress' => $streetAddress, 
     'route' => $route, 
     'city' => $locality, 
     'state' => $state, 
     'postalCode' => $postalCode, 
     'country' => $country, 
     'latitude' => $latitude, 
     'longitude' => $longitude, 
     'content' => $content, 
     'date' => strtotime(date('Y-m-d H:i:s')) 
    ] 
]); 

Ich beziehe mich auf diesen Artikel Geo Location and Search aber keine Ahnung, wie immer Abfrage zu implementieren und verwenden Sie die Suche.

Irgendeine Idee?

Danke.

Antwort

0

in Ihrem Dokument müssen Sie Lage injizieren, wie folgt aus:

$indexed = $client->index([ 
'index' => 'users', 
'type' => 'user', 
'body' => [ 
    'name' => $name, 
    'email' => $email, 
    'company' => $company, 
    'phone' => $phone, 
    'streetAddress' => $streetAddress, 
    'route' => $route, 
    'city' => $locality, 
    'state' => $state, 
    'postalCode' => $postalCode, 
    'country' => $country, 
    'content' => $content, 
    'date' => strtotime(date('Y-m-d H:i:s')), 
    'location' => [ 
     'lat' => $latitude, 
     'lon' => $longitude 
    ] 
] 
]); 

auch müssen Sie Eigenschaften (mapping) zu Ihrem Dokument hinzuzufügen:

PUT-Anfrage an Ihre Elasticsearch zB: localhost:9200/users/_mapping/user

"properties" : { 
     "location" : { 
      "type" : "geo_point" 
     } 
    } 

und in der Abfrage senden Sie wie folgt aus:

{ 
"filtered" : { 
    "query" : { 
    }, 
    "filter" : { 
     "geo_distance" : { 
      "distance" : "12km", 
      "user.location" : { 
       "lat" : 40, 
       "lon" : -70 
      } 
     } 
    } 
} 
} 
+0

Können Sie mir bitte führen, wo ich hinzufügen müssen ' "Eigenschaften": { "location": { "type": "geo_point" } }' das? –

+0

im Mapping Ihres Dokuments, können Sie es manuell tun, indem Sie Post-Anfrage an '_mapping/user' .. es wird besser sein, wenn Sie einen Blick auf die Mapping-Dokumentation –

+0

Ich habe keine Ahnung von Zuordnung, aber ich habe diese Suche code: '$ query = $ client-> suche ([ 'body' => [ 'sort' => [ 'datum' => ['bestellen' => 'desc'] ], 'query' => [ 'Bool' => [ 'sollte' => [ 'Spiel' => [$ filter => $ q] ] ] ] ] ]); ' –