Проблема запроса с облачным хранилищем данных Google и фильтром

#google-cloud-datastore

#google-cloud-datastore

Вопрос:

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

Если я верю в документацию https://cloud.google.com/datastore/docs/concepts/queries мы можем реализовать фильтр по нескольким столбцам с помощью инструкции EQUALS.

Но при тестировании я получаю сообщение об ошибке от API. Во время поиска в github хранилища данных я нашел эту ссылку: https://github.com/GoogleCloudPlatform/google-cloud-dotnet/issues/304 что соответствует моей проблеме, за исключением того, что в моем случае запрос должен выглядеть хорошо.

Вот отправленный запрос:

 {
  {
    "kind": [{
      "name": "talk.message"
    }],
    "filter": {
      "compositeFilter": {
        "op": "AND",
        "filters": [{
            "propertyFilter": {
              "property": {
                "name": "Conversation"
              },
              "op": "EQUAL",
              "value": {
                "stringValue": "2f16c14f6939464ea687d316438ad4cb"
              }
            }
          },
          {
            "propertyFilter": {
              "property": {
                "name": "CreatedOn"
              },
              "op": "LESS_THAN_OR_EQUAL",
              "value": {
                "timestampValue": "2019-03-15T10:43:31.474166300Z"
              }
            }
          },
          {
            "propertyFilter": {
              "property": {
                "name": "CreatedOn"
              },
              "op": "GREATER_THAN_OR_EQUAL",
              "value": {
                "timestampValue": "2019-03-14T10:43:31.474175100Z"
              }
            }
          }
        ]
      }
    }
  }
}
  

И вот ответ от API:

 {Grpc.Core.RpcException: Status(
      StatusCode=FailedPrecondition, 
      Detail="no matching index found. recommended index is:
              - kind: talk.message
                properties:
                - name: Conversation
                - name: CreatedOn"
     )
  

Согласно документации, это должно быть хорошо… но это не так!
Чего мне не хватает?

Ответ №1:

Ваш запрос включает как фильтр РАВНЫХ (при разговоре), так и фильтр не РАВНЫХ (при создании), поэтому для выполнения запроса вам нужен составной индекс. Итак, ваш запрос действителен, но для выполнения запроса необходим составной индекс.

Комментарии:

1. Привет, Джим, спасибо за твой ответ. Я взгляну на составной индекс.