1

私は完全に正しいとは思わない設計モデルを使用しているので、おそらく私はそれについて行くための最良のアプローチを見つけるためにそこに質問を投げるべきだと思った。 私のような2つのフィールドを持つ基本エンティティを作成しました:今、私は私のデータストア・インデックスを書いていたときにObjectifyエンティティモデルの設計

 @Entity 
    @Cache 
    public class user extends BaseEntity 
    @Index private String email ; 
    @Index private String dob 

:今、私はまた、独自のインデックスを持つユーザーなどと呼ばれる別のサブクラスを持っている

 public abstract class BaseEntity 
    @Index private Key<User> createdBy; 
    @Index private DateTime creationDate = new DateTime(); 

。 xmlファイルはこのようにするのが正しいです:

<datastore-index kind="User" ancestor="false" source="manual"> 
    <property name="createdBy" direction="asc"/> 
    <property name="creationDate" direction="asc"/> 
    <property name="email" direction="asc"/> 
    <property name="dob" direction="asc"/> 
    </datastore-index> 

     or 

    <datastore-index kind="User" ancestor="false" source="manual"> 
    <property name="email" direction="asc"/> 
    <property name="dob" direction="asc"/> 
</datastore-index> 

ありがとう。

答えて

1

Cloud Datastoreでは、必要なインデックスは、データモデルではなく、実行するクエリに完全に依存しています。ドキュメントのindex definitionセクションは非常に役に立ちます。たとえば、クエリを実行したい場合:あなたが記載されているインデックスのどちらにもかかわらず、(クエリを満たすでしょう

<datastore-index kind="User" ancestor="false" source="manual"> <property name="email" direction="asc"/> <property name="createdDate" direction="asc"/> </datastore-index>

Query<User> q = ofy().load().type(User.class) .filter("email", "[email protected]").order("createdDate");

あなたは、インデックスが必要になります2番目の索引にリストされているプロパティーは、必要な索引にリストされているもののスーパーセットです)。

App Engine development serverを使用してアプリケーションを実行し、運用サービスで実行するアプリケーションが必要なクエリを実行する必要があります。これにより、これらのクエリを提供するのに必要なインデックスを正確に含むdatastore-indexes-auto.xmlが自動的に生成されます。

+0

ありがとうございます。私が質問を投稿した後にそれを完成しました –

関連する問題