2016-04-20 19 views
2

Ich möchte eine neue Entität testen, die ich im Google Datastore erstellt habe. Ich versuche, eine GQL Abfrage mit einer Ungleichheit zu tun, einige Einheiten in dem Datenspeicher-Web-Interface abzuzurufen:Google Datastore-Fehler: Kein passender Index gefunden

SELECT * FROM UserMatchingIndex WHERE age < 25 AND wants_male = false AND wants_dating = false AND wants_friendship = false AND wants_age = 20

Aber ich habe immer eine Fehlermeldung: „GQL Abfrage-Fehler: Ihre Datastor nicht den Composite-Index haben (Entwickler bereitgestellt), die für diese Abfrage benötigt werden. " während ich die erforderlichen zusammengesetzten Indizes definiert habe!

UserMatchingIndex: age ▲ wants_male ▲ wants_dating ▲ wants_friendship ▲ wants_age ▲ Serving

UserMatchingIndex: age ▲ wants_female ▲ wants_dating ▲ wants_friendship ▲ wants_age ▲ Serving

Diese werden in der index.yaml wie folgt definiert:

- kind: UserMatchingIndex 
    ancestor: no 
    properties: 
    - name: age 
    - name: wants_male 
    - name: wants_dating 
    - name: wants_friendship 
    - name: wants_age 

- kind: UserMatchingIndex 
    ancestor: no 
    properties: 
    - name: age 
    - name: wants_female 
    - name: wants_dating 
    - name: wants_friendship 
    - name: wants_age 

Ich weiß nicht wirklich sehen, was möglicherweise falsch sein könnte ... Ich habe für andere Entitäten viele Male getan. Wenn Sie ein paar Hinweise haben, sind Sie willkommen.

Danke,

+0

Haben diese Indizes in der Entwicklerkonsole den Status "Serving"? –

+0

Ja, sie haben den "Serving" -Status, wie Sie oben sehen können. –

+0

Normalerweise schlägt der Fehler im Protokoll vor, welcher Index hinzugefügt werden soll. Zumindest funktioniert das bei Verwendung von UserMatchingIndex.query(). Filter (UserMatchingIndex.wants_male == Falsch, UserMatchingIndex.wants_dating == False, UserMatchingIndex.wants_friendship == False, UserMatchingIndex.wants_age == 20, UserMatchingIndex.age <25) – Vincent

Antwort

2

Dieses Problem zu Google Cloud Unterstützung vorgelegt wurde und es scheint ein Problem auf ihrer Seite, oder zumindest zu sein, eine Beschränkung noch nicht dokumentiert. Ändern der Reihenfolge der Eigenschaften wie folgt:

- kind: UserMatchingIndex 
    ancestor: no 
    properties: 
    - name: wants_male 
    - name: wants_dating 
    - name: wants_friendship 
    - name: wants_age 
    - name: age 

macht die Abfrage funktioniert.

EDIT: Antwort von Google-Support

"The rows of an index table are sorted first by ancestor and then by property values, in the order specified in the index definition. The perfect index for a query, which allows the query to be executed most efficiently, is defined on the following properties, in order:

  1. Properties used in equality filters
  2. Property used in an inequality filter (of which there can be no more than one)
  3. Properties used in sort orders

This ensures that all results for every possible execution of the query appear in consecutive rows of the table."

Diese Beschränkung sollte bald zu dokumentieren.

Verwandte Themen