# Diagnosis

## Symptom

`query(id=...)` returns unexpected matches, or fails where `fetch` on the same id works.

## Likely cause

Query-by-id runs a similarity search using the stored vector as the query; it is subject to the same top_k, filter, and namespace rules as a vector query. It is not a point lookup. The docs also note limitations on querying by id versus fetching.

## Confirm it

1. Run `fetch` on the id: if fetch works, the record exists and the issue is query semantics.
2. Check the namespace on the query call; query-by-id still scopes to a namespace.
3. Check whether a filter is excluding the expected neighbors.

## Fix

1. For point lookups use `fetch`, not `query(id=...)`.
2. For find-similar-to-this-record, keep `query(id=...)` but set namespace, top_k, and filter deliberately.
3. If you need the vector values back too, pass `include_values=True`; matches do not include values by default.

## Verify the fix

Fetch the id, then query by the fetched values directly and compare the match lists; they should agree.