This replaces the elastic crate by implementing the opensearch response struct in the file `opensearch.rs`. Attempted looking into using the opensearch rust crate but it doesn't implement a deserializable struct. Instead, examples showed accessing the hits as a serde_json::Value. Opted to implementing our own struct instead with everything but the necessary hits field implemented.
Context: https://linear.app/comm/issue/ENG-7046/remove-elastic-package-from-identity-service