Опрос хранилища данных с использованием некоторых индексированных свойств - PullRequest
0 голосов
/ 30 апреля 2020

Я пробую индексы Cloud Datastore и не могу определить конфигурацию, которая мне нужна для разрешения моих запросов.

Я создал несколько сущностей одного типа (названных "object"), все их с 5 свойствами, названными одинаково (property_0, property_1, ..., property_4). Затем я создал составной индекс для этого вида, проиндексировал все 5 свойств и установил property_4 на последнем месте, потому что я хочу применить к нему фильтры неравенства.

Определение индекса:

indexes:
- kind: object
  ancestor: no
  properties:
  - name: property_0
    direction: asc
  - name: property_1
    direction: asc
  - name: property_2
    direction: asc
  - name: property_3
    direction: asc
  - name: property_4
    direction: asc

Запросы, которые я пытаюсь разрешить, всегда применяют фильтр неравенства к property_4, и могут быть фильтры для некоторых других свойств. Некоторые примеры:

  • SELECT * FROM объекта WHERE property_4> 5 AND property_0 = true
  • SELECT * FROM объекта WHERE property_4> 5 AND property_4 <10 AND property_1 = 'Approved' </li>
  • SELECT * ОТ объекта WHERE property_4> 8 AND property_2 = 100 AND property_3 = true
  • SELECT * FROM объекта WHERE property_4> 15 AND property_0 = true AND property_1 = 'черновик' AND property_2 = 10 AND property_3 = false

Единственный запрос, который работает, если я фильтрую каждое свойство в индексе, остальные показывают сообщение об ошибке «Ваше хранилище данных не имеет составного индекса (предоставлено разработчиком) для этого запроса. "

Разве не все запросы должны быть разрешены созданным индексом? Или мне нужно создать индекс для каждой комбинации фильтров, которые я хочу применить? (т. е. один индекс для фильтрации property_4 и property_0; другой индекс для property_4 и property_1; другой индекс для property_4, property_2 и property_3; ...)

1 Ответ

1 голос
/ 04 мая 2020

Вы правы, вам нужно будет создать индексы для каждой комбинации фильтра, который вы хотите применить.

Вы можете указать индексы для отдельных запросов в файле index.yaml следующим образом:

indexes:
- kind: object
  properties:
  - name: property_0
  - name: property_1
  - name: property_2
  - name: property_3
  - name: property_4

- kind: object
  properties:
  - name: property_3
  - name: property_4
  - name: property_0

...
...