Так работает хранилище данных GAE (кстати, большинство реляционных баз данных работают так же!): Нулевые значения не равны чему-либо, поэтому часть keywords = :keywords
вашего запроса ложна для записей с null keywords
- поскольку эта часть ложна, то, конечно, and
.
Вам понадобятся два запроса, один для keywords = :keywords
и один для проверки «является нулевым», и используйте их два непересекающихся набора результатов (Python GAE моделирует оператор «IN» в коде уровня приложения, что, я считаю, Java GAE этого не делает, но поскольку наборы являются непересекающимися, в этом случае на самом деле нет никаких загадок или трудностей; -).
Редактировать : это симулированный IN
(который можно было бы использовать здесь) в Python, не OR
; Java-эквивалент этого имитируемого на уровне приложения IN
на самом деле contains
.