About the Github doc examples.

I wanted to clarify and/or assert what the output means. Take the results of the example given with `k=3`

.

```
{:ok,
#Nx.Tensor<
u64[1][3]
[
[2, 0, 1]
]
>,
#Nx.Tensor<
f32[1][3]
[
[5.0, 3281.0, 3445.0]
]
>}
}
```

I understand the response is of type `{:ok, label, distance}`

.

Is the label tensor response the list of “x” matching indexes of the `HSWNLib.Index`

(as found by `knn_search`

), and the corresponding “distance tensor” between the input and the indexes?

In this example, the data consists of 5 2d-vectors:

```
Nx.tensor(
[
[42, 42],
[43, 43],
[0, 0],
[200, 200],
[200, 220]
],
type: :f32
)
```

With a vector input of `[1.0, 2.0]`

, then intuitively the vector `[0.0, 0.0]`

is the closest (L2 in mind) whose index is 2. If you set `k=3`

, then the indexes 0 and 1 with values `[42.0, 42.0]`

and `[43.0, 43.0]`

seem intuitively close. Are the indexes of the Index the label response? (seems so on this example but the doc could probably develop a bit).

You then need to lookup into your Index (`HNSWLib.Index.get_items`

) at theses indexes to find the matching data.

Then more generally, isn’t there a way to normalise the distances so that you could retain matching indexes less than a percentage of the max distance around an input rather a fixed number of findings?

And finally, given that you found say the 1st knn embedding, would you save into a database all the embeddings as a vector and query it? or use a vector extension for this? (`pgvector`

or `sqlite_vss`

)?