0
votes

I've written a piece of code that adds and retrieves entities from the Datastore based on one filter (and order on the same property) - that worked fine. But when I tried adding filters for more properties, I got:

PreconditionFailed: 412 no matching index found. recommended index is:
- kind: Temperature
properties:
- name: DeviceID
- name: created

Eventually I figured out that I need to create index.yaml. Mine looks like this:

indexes:
- kind: Temperature
  ancestor: no
  properties:
  - name: ID
  - name: created
  - name: Value

And it seems to be recognised, as the console shows: that it has been updated Yet when I run my code (specifically this part with two properties), it doesn't work (still getting the above-mentioned error) (the code is running on the Compute Engine).

query.add_filter('created', '>=', newStart)
query.add_filter('created', '<', newEnd)
query.add_filter('DeviceID', '=', devID)
query.order = ['created']

Trying to run the same query on the console produces

Your Datastore does not have the composite index (developer-supplied) required for this query.

error. Search showed one other person who had the same issue and he managed to fix it by changing the order of the properties in the index.yaml, but that is not helping in my case. Has anybody encountered a similar problem or could help me with the solution?

1

1 Answers

1
votes

You'll need to create the exact index suggested in the error message:

- kind: Temperature
  ancestor: no
  properties:
  - name: DeviceID
  - name: created

Specifically, the first property in the index needs to be DeviceID instead of ID and the last property in the index needs to be the one you're using in the inequality filter (so you can't have Value as the last property in the index).