2015-04-29 4 views
4

Я получаю 400 ошибочных запросов от elasticsearch. Ошибка - это большой ответ блока, но я считаю, что это ключевая часть.Geo дистанционный фильтр

failed to find mapper for [location] for geo distance based sort 

Я использую ES 1.5.1 для запроса. Мой запрос:

{ 
    query: { 
    filtered: { 
     query: { 
     match: { 
      title:"amsterdam*" 
     } 
     } 
    } 
    }, sort: [ 
     { 
     _geo_distance: { 
      location: {lat:0, lon:0}, order:"asc", unit:"miles" 
     } 
     } 
    ] 
} 

Я отформатировал запрос так же, как в документации here. Я пропустил шаг?

Это мое текущее отображение:

{ 
    "gb": { 
    "mappings": { 
     "store": { 
     "dynamic":"false", 
     "properties": { 
      "active": { 
      "type": "b‌​oolean" 
      }, 
      "deleted": { 
      "type": "boolean" 
      }, 
      "location": { 
      "type":"geo_point" 
      }, 
      "open": { 
      "ty‌​pe": "boolean" 
      }, 
      "suspended": { 
      "type": "boolean" 
      }, 
      "title": { 
      "type":"string" 
      } 
     } 
     } 
    } 
    } 
} 
+1

Может вы разделяете отображение? – Rob

+0

Я относительно не знаком с ES. Как поделиться картографированием? Я могу прочитать документацию и попытаться понять ее. –

+0

http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-get-mapping.html - в основном тип http: // localhost: 9200/index name/_mapping в браузер и полученное сообщение Json – Rob

ответ

0

Ваш запрос в порядке. Поле location должно иметь тип отображения geo_point, который, кажется, имеет.

Попробуйте этот сценарий Marvel Sense:

(установки Marvel, запустив bin/plugin -i elasticsearch/marvel/latest)

put geo 
put geo/geo/_mapping 
{ 
    "properties": { 
    "location": { 
      "type": "geo_point", 
      "geohash" : true 
    } 
    } 
} 
put geo/geo/1 
{ 
    "location": { 
    "lat": 0.1, 
    "lon": 0.1 
    } 
} 
put geo/geo/2 
{ 
    "location": { 
    "lat": 50.1, 
    "lon": 7.1 
    } 
} 
put geo/geo/3 
{ 
    "location": { 
    "lat": 5.1, 
    "lon": 3.1 
    } 
} 
get geo/geo/_search 
{ 
    "query": { 
     "match_all": { 
     } 
    }, 
    "sort": [ 
     { 
     "_geo_distance": { 
      "location": {"lat":0, "lon":0}, 
      "order":"asc", 
      "unit":"km" 
     } 
     } 
    ] 
} 
get geo/_mapping 

По какой-то причине, поисковый запрос не работает для меня с Sense. Via завиток работает без проблем, хотя:

curl -XGET '0:9200/geo/geo/_search?pretty' [email protected]

0

Я побежал в эту ошибку, используя elasticsearch НПМ - Я не думаю, что отображение становилось создано правильно. Мне пришлось отформатировать мой тип геопозиции как массив, чтобы все работало.

Используя тип объекта не работает

"location": { 
    "lat": 41.12, 
    "lon": -71.34 
} 

Формат ваше поле как массив вместо

"location": [ -71.34, 41.12 ] 
Смежные вопросы