2011-04-23 5 views
2

안녕하세요. 내 쿼리로 주문하려고하면 DatastoreNeedIndexException이 발생합니다.Appengine : "order by"를 사용하는 DatastoreNeedIndexException

@PersistenceCapable 
public class Gaze { 

@PrimaryKey 
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
private Long id; 

@Persistent 
Blob image; 

@Persistent 
Long time; 

@Persistent 
Long TTL; 

@Persistent 
String town; 

@Persistent 
String countryCd; 

@Persistent 
String tag; 

쿼리 :

Query query = pm.newQuery(Gaze.class, "tag == tagParam"); 
    query.declareParameters("String tagParam"); 
    //query.setRange(0,10); 
    query.setOrdering("time desc"); 
    List<Gaze> results = (List<Gaze>) query.execute(tag); 

및 인덱스 :

<datastore-indexes autoGenerate="false"> 
<datastore-index kind="Gaze" ancestor="false"> 
<property name="tag" direction="asc" /> 
<property name="time" direction="desc"/> 
<property name="TTL" direction="desc" /> 
</datastore-index> 

난 정말 어디를보고 모르는 여기

는 코드입니다. 주문을 삭제하면 개체가 기본 키순으로 정렬됩니다.

답변

2

인덱스를 만들었습니까? 관리 콘솔에서 확인할 수 있습니다. 가끔은 시간이 좀 걸립니다 ...

+0

mg 그게 다야. 인덱스가 배포보다 시간이 오래 걸렸다는 것을 알지 못했습니다. 이 문제는 =) –

+0

문제가 해결되었습니다! 참으로 천천히 일 수 있습니다! 이제, anwser '허용'표시를 고려하시기 바랍니다 ... – olivierlemasle

+0

얼마나 걸립니까? –

0

색인에 검색어가 사용하지 않는 TTL 필드가 있습니다. 인덱스는 정확한 필드가 필요한 경우에만 사용할 수 있습니다. tagtime desc에만 색인을 생성해야합니다.

관련 문제