Я использую API-интерфейс elasticSearch. Я хочу искать сообщения, которые находятся вокруг определенного момента. Таким образом, сообщение имеет поле координат. Вот мой код, чтобы добиться отображения:Эластичный поиск: Нулевые результаты для фильтра Geodistance
String mappingString =
"{"
+ "\"posts\" : {"
+ "\"properties\" : {"
+ "\"coordinates\" : {"
+ "\"type\" : \"geo_point\""
+ "}"
+ "}"
+ "}"
+"}";
Client.admin().indices().preparePutMapping("posts").setType("posts").setSource(mappingString).execute().actionGet();
Я проверяемый ElasticSearch голову, что я на самом деле есть посты в индексе, который должен пройти через фильтр. Сообщение выглядит так:
{
"link":"http://instagram.com/p/hBV...EjHk/",
"pictureURL":"http://distilleryimage0.s3.amazonaws.com/b5887...8f21ef_6.jpg",
"userID":"358...3",
"commentsCount":0,
"likesCount":2,
"coordinates":{"lat":32.519634,"lon":33.414997},
"userName":"tuvs...yahde",
"nGrams":[],
"id":"IG_5948523...879524_358...163",
"indexDate":1385131949
}
Это будет храниться в индексе с именем «posts». Тем не менее, у меня есть разные типы в этом индексе, все из которых разделяют поля координат, id и indexDate, но могут отличаться в других полях (это потому, что у некоторых сообщений есть картинки, у других - текст, у других - оба).
Наконец, вот код, который я использую для запроса ElasticSearch:
GeoDistanceFilterBuilder gdFilter = FilterBuilders.geoDistanceFilter("posts.coordinates")
.point(lat, lon)
.distance(distanceInMeters, DistanceUnit.METERS)
.optimizeBbox("memory")
.geoDistance(GeoDistance.ARC);
SearchResponse response = Client.prepareSearch("posts")
.setQuery(QueryBuilders.matchAllQuery())
.setFilter(gdFilter)
.setSize(100)
.execute()
.actionGet();
Проблема в том, что любые значения, я использую для переменных в запросе, и фильтр, я всегда получаю нулевой результат. Может ли кто-нибудь увидеть, что я делаю неправильно?
Вы правы. Однако это, к сожалению, не решает мою проблему. Я переключил эти два параметра по 10 раз (вероятно, там, где возникла ошибка), попробовав его разными комбинациями для других параметров. Но все равно не повезло ... –
Можете ли вы представить весь пример, используя ваши тестовые данные? – imotov
Я добавил больше контекста. (Извините за задержку.) –