#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
каталоге вашего приложения.
Вы можете посмотреть этот блог: