2016-08-19 4 views
2

Я пытаюсь работать с базой данных Google Datastore в качестве моей бэкэнд-базы данных и запрашивать ее с помощью геопространственных запросов, как в уроке от this, но все запросы ничего не возвращают. Я сделал следующий демонстрационной отладки сервлетов в Java:Datastore GeoSpatial queries ничего не возвращает

private static final String tableName = "DEBUG"; 
private static final double radius = 100 * 1000; //100 km 
private static final String NameKey = "Name"; 
private static final String LocationKey = "location"; 

//Parameters from the http servlet request 
String name; 
float lat, lng; 

//Insert a new person to the DB 

Entity person = new Entity(tableName); 
person.setProperty(NameKey, name); 
GeoPt location = new GeoPt(lat, lng); 
person.setProperty(LocationKey, location); 
datastore.put(person); 

//returns the users in the radius 

Query.Filter filter = new Query.StContainsFilter(LocationKey, new Query.GeoRegion.Circle(location, radius)); 
Query query = new Query(tableName).setFilter(filter); 

PreparedQuery pq = datastore.prepare(query); 

JsonArray users = new JsonArray(); 
for (Entity entity : pq.asIterable()){ 
    users.add(new JsonObject() 
     .add(NameKey, (String)entity.getProperty(NameKey)) 
     .add(LocationKey, ((GeoPt)entity.getProperty(LocationKey)).toString())); 
} 

result.add("Users", users); 

Вставка в БД работает, вот скриншот из консоли Google:

screenshot

Но запрос всегда терпит неудачу, и бросает :

javax.servlet.ServletContext log: DebugGeoPtServlet: Returns: {Error=no matching index found. 
The suggested index for this query is: 
    <datastore-index kind="DEBUG" source="manual"> 
     <property name="location" mode="geospatial"/> 
    </datastore-index> 

} 

Я не знаю, что не так в коде. Я скопировал это как это в учебнике, и точки, которые я вставил, очень близки (не, даже близко радиус 100 км)

ответ

1

Необходимо добавить это определение индекса в файл datastore-indexes.xml (в папке /WEB_INF). Это выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?> 
<datastore-indexes 
    autoGenerate="true"> 

    <datastore-index kind="DEBUG" source="manual"> 
     <property name="location" mode="geospatial"/> 
    </datastore-index> 

</datastore-indexes> 

Как правило, при попытке различных запросов на сервере разработки, он создает необходимые определения индекса автоматически. Однако иногда вам может потребоваться добавить их вручную.

+0

Я, кажется, я не один, в моем проекте (Android Studio IDE): Backend Src основные ява ресурсы WebAPP WEB-INF AppEngine-web.xml logging.properties веб. xml index.html Должен ли я добавить его вручную? Спасибо :) –

+0

Да, добавьте его. Я обновлю ответ на образец. –

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