2014-02-09 4 views
3

Я использую Geo Distance Filter с ElasticSearch и независимо от того, какое расстояние я ищу, elasticsearch 0.90.11 возвращает нулевые результаты.Geo Фильтр расстояний с ElasticSearch всегда возвращает 0 результатов

Вот что я сделал: Во-первых, удалить/создать новый индекс с отображением гео:

curl -XDELETE 'http://localhost:9200/photos' 

curl -XPOST 'http://localhost:9200/photos' -d ' 
{ 
    "mappings": { 
    "pin" : { 
     "properties" : { 
      "location" : { 
       "type" : "geo_point" 
      } 
     } 
    } 
    } 
} 
' 

Затем добавьте документ:

curl -XPOST 'http://localhost:9200/photos/photo?pretty=1' -d ' 
{ 
    "pin" : { 
     "location" : { 
     "lat" : 46.8, 
     "lon" : -71.2 
     } 
    }, 
    "file" : "IMG_2115.JPG" 
} 
' 

Тогда поиск:

curl -XGET 'http://localhost:9200/photos/_search?pretty=1&size=20' -d ' 
{ 
    "query" : { 
     "match_all" : {} 
    }, 
    "filter" : { 
     "geo_distance" : { 
     "distance" : "10km", 
     "pin.location" : { 
      "lat" : "46.8", 
      "lon" : "-71.2" 
     } 
     } 
    } 
} 
' 

Но поиск дает нулевые образы:

{ 
    "took" : 2, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 0, 
    "max_score" : null, 
    "hits" : [ ] 
    } 
} 

Кто-нибудь знает, почему он не нашел документ в радиусе? В качестве интересной заметки, «отфильтрованный» синтаксис, имеющий как «запрос», так и «фильтр» в качестве подполей, как описано в документе, упомянутом выше, кажется, больше не работает вообще, кажется, что теперь «запрос» и «фильтр» должны быть на верхнем уровне json-запроса.

Любая помощь приветствуется ...

ответ

6

Оказывается, что страница Offical руководство не является точным, то отображение должно быть

[Sun Feb 9 11:01:55 2014] # Request to: http://localhost:9200 
curl -XPUT 'http://localhost:9200/photos?pretty=1' -d ' 
{ 
    "mappings" : { 
     "photo" : { 
     "properties" : { 
      "Location" : { 
       "type" : "geo_point" 
      } 
     } 
     } 
    } 
} 
' 

и записи с данными GPS, то должны быть добавлены как это:

[Sun Feb 9 11:01:56 2014] # Request to: http://localhost:9200 
curl -XPOST 'http://localhost:9200/photos/photo?pretty=1' -d ' 
{ 
    "file" : "/home/mschilli/iphone/IMG_2115.JPG", 
    "Location" : [ 
     46.8, 
     -71.2 
    ] 
} 
' 

позже запрос

[Sun Feb 9 11:05:00 2014] # Request to: http://localhost:9200 
curl -XGET 'http://localhost:9200/photos/_search?pretty=1&size=100' -d ' 
{ 
    "filter" : { 
     "geo_distance" : { 
     "distance" : "1km", 
     "Location" : [ 
      36.986, 
      -121.443333333333 
     ] 
     } 
    }, 
    "query" : { 
     "match_all" : {} 
    } 
} 
' 

отображает желаемый результат, правильно отфильтровывая результаты за пределами выбранного расстояния GPS.

+0

+1 спасибо! Я пытался понять это в течение 2 дней. –

+0

Я отправил запрос [pull request] (https://github.com/elastic/elasticsearch/pull/15745), чтобы обновить вводящие в заблуждение документы. – Jonny

Смежные вопросы