0

次のように定義されたエンティティがあります。

a    Integer
b    Float
type     String 
type     STRING  <--- Indexed property

並べ替えなしでクエリを実行すると、結果が返されます。

SELECT * FROM com_MyDomain WHERE type = 'GENERAL'

並べ替えを追加すると、クエリは結果を返しません。

SELECT * FROM com_MyDomain WHERE type = 'GENERAL' ORDER BY b, a

また、次のように定義されたインデックス (App Engine コンソールでのサービス提供ステータス) も持っています。

<datastore-index kind="com_MyDomain"
    ancestor="false" source="manual">
    <property name="type" direction="asc" />
    <property name="b" direction="asc" />
    <property name="a" direction="asc" />
</datastore-index>
4

1 に答える 1

1

私が考えることができる唯一のことは、エンティティに b または a の値がないことです。

ここに書かれているように:

クエリで指定されたプロパティがないエンティティは無視されます

同じ種類のエンティティが同じプロパティを持っている必要はありません。クエリの結果として適格であるためには、エンティティは、クエリのフィルターと並べ替え順序で指定されたすべてのプロパティの値 (場合によっては null) を持っている必要があります。そうでない場合、エンティティはクエリの実行に使用されるインデックスから除外されるため、クエリの結果には含まれません。

( https://developers.google.com/appengine/docs/python/datastore/queries の「クエリの制限」から)

したがって、唯一の論理的なことは、データに a または b が入力されていないようです。

于 2014-07-30T14:39:48.730 に答える