## Summary The server returns a rerank score per object (and per group for a grouped search), but the client never unmarshals it. A reranked search therefore arrives correctly ordered with the number that produced the order missing, and there is no way to get it through the public API. ## Per object `MetadataResult` carries both the value and an explicit presence flag: ``` double rerank_score = 21; bool rerank_score_present = 22; ``` but `QueryMetadata` exposes only four fields: ```java public final class QueryMetadata extends Record { public Float distance(); public Float certainty(); public Float score(); public String explainScore(); } ``` ## Per group Same thing on the grouped path. `GroupByResult.rerank` is a `RerankReply { double score = 1; }`, while `QueryResponseGroup` exposes only: ```java public String name(); public Float minDistance(); public Float maxDistance(); public long numberOfObjects(); public List<QueryObjectGrouped<T>> objects(); ``` ## The field is never read Extracting `io/weaviate/client6/v1/api/**` and `io/weaviate/client6/v1/internal/orm/**` from `client6-6.3.1-all.jar` and grepping for `rerankScore`, `getRerankScore` and `RerankReply` returns **zero** matches. Disassembling the `QueryResponse` unmarshaller shows it reading `getCreationTimeUnix`, `getLastUpdateTimeUnix`, `getDistance`, `getCertainty`, `getScore` and `getExplainScore` — and nothing else. ## The server does populate it Wrapping the `Rpc` returned by `QueryRequest.rpc(...)` and reading `MetadataResult` off the reply before delegating to the real `unmarshal` yields real values, correlated by uuid — querying `"fish"` over a set of animal descriptions with `reranker-cohere`: ``` 0.781147420 The fish is an aquatic animal that lives ... 0.051658671 The dog is a very popular domestic anima ... 0.050354082 The lion is a wild and majestic animal, ... ``` The row order matches the score descending, which is exactly the ordering the server applied — so the data is present on the reply and simply discarded. ## Impact Without this, a client cannot show or threshold on the rerank score, or explain the resulting order. The only workaround is to reach into `GrpcTransport`/`QueryRequest` internals and re-read the reply, which is not something a consumer should have to do. ## Suggested fix Add a `rerankScore` component to `QueryMetadata` (honouring `rerank_score_present`, since `0.0` is a legitimate score) and read it in the `QueryResponse` unmarshaller. The same for `QueryResponseGroup` from `GroupByResult.rerank`. ## Version - java-client 6.3.1 (also present in 6.3.0) - Weaviate 1.39.0