Ошибка составного фильтра хранилища данных GAE

#java #google-cloud-datastore

#java #google-облако-хранилище данных

Вопрос:

Что на самом деле происходит, когда я устанавливаю фильтры хранилища данных таким образом?

 Query("Product").setFilter(filter1).setFilter(filter2);
  

Я обнаружил, что результатом не является ни И, ни ИЛИ.

Я также пытался использовать CompositeFilterOperator.and , но я получил DatastoreNeedIndexException , где он должен возвращать что-то, соответствующее составному фильтру AND .

Комментарии:

1. мой filter1 находится в строке, а filter2 — в int

2. DatastoreNeedIndexException означает, что вам не хватает индекса для выполнения вашего запроса. Добавьте его в свой datastore-indexes.xml и это должно устранить ошибку. Более того, если я не ошибаюсь, ваш второй setFilter переопределит первый, поэтому вы будете искать только этот второй фильтр.

3. Я думал, что все записи в хранилище данных автоматически индексируются? Итак, мне нужно создать индекс, соответствующий моему запросу? Я думаю, вы правы. 2-й фильтр переопределит 1-й фильтр.

Ответ №1:

App engine предопределил простой индекс для каждого свойства объекта. Механизм приложений может определять дополнительные пользовательские индексы в именованном файле конфигурации индекса datastore-indexes.xml , который создается в /war/WEB-INF/appengine-generated каталоге вашего приложения.

Вы можете посмотреть этот блог:

http://rlabs.wordpress.com/2009/04/01/fixing-appengine-error-no-matching-index-found-this-query-needs-this-index/