example-rag is the one thing in this repository somebody can run, and it predates almost everything
worth showing.
It was written for the 1.x line. Since then 2.2.0 added an ingest that owns batching, concurrency
and resume; server-side inference, where a point carries text and a model name instead of a vector;
payload index parameters, without which matchPhrase matches nothing; hybrid search over a dense and a
sparse vector, which is the single most common thing anyone builds on Qdrant; and a failure vocabulary
that says whether retrying is worth it. The example demonstrates none of them. It ingests with upsert,
searches with a dense vector, and stops.
That matters more than a stale sample usually would, because of who reads it. The README argues the case
and the example is where somebody checks whether the argument survives contact with code. A reader who
runs it sees the 1.x client, concludes that is what this is, and never meets the parts that are the
reason to choose it.
The work is to bring it up to what the library now does, not to make it bigger. Hybrid retrieval instead
of dense-only, because that is what a real RAG service does. ingest instead of upsert, with the
checkpoint written somewhere, because that is what a real ingest does. A payload index created with the
parameters the filters need. And an error path that distinguishes retryable from terminal instead of
catching everything.
What it should not grow is a second purpose. It is a runnable demonstration, not a starter template, and
the fastest way to make it useless is to make it configurable.
Exit criterion: example-rag uses ingest, hybrid search over a dense and a sparse vector, a payload
index created with parameters, and the retryable distinction, and its README says which release each of
those arrived in so the next reader can tell what is current.
example-ragis the one thing in this repository somebody can run, and it predates almost everythingworth showing.
It was written for the
1.xline. Since then2.2.0added aningestthat owns batching, concurrencyand resume; server-side inference, where a point carries text and a model name instead of a vector;
payload index parameters, without which
matchPhrasematches nothing; hybrid search over a dense and asparse vector, which is the single most common thing anyone builds on Qdrant; and a failure vocabulary
that says whether retrying is worth it. The example demonstrates none of them. It ingests with
upsert,searches with a dense vector, and stops.
That matters more than a stale sample usually would, because of who reads it. The README argues the case
and the example is where somebody checks whether the argument survives contact with code. A reader who
runs it sees the
1.xclient, concludes that is what this is, and never meets the parts that are thereason to choose it.
The work is to bring it up to what the library now does, not to make it bigger. Hybrid retrieval instead
of dense-only, because that is what a real RAG service does.
ingestinstead ofupsert, with thecheckpoint written somewhere, because that is what a real ingest does. A payload index created with the
parameters the filters need. And an error path that distinguishes retryable from terminal instead of
catching everything.
What it should not grow is a second purpose. It is a runnable demonstration, not a starter template, and
the fastest way to make it useless is to make it configurable.
Exit criterion:
example-ragusesingest, hybrid search over a dense and a sparse vector, a payloadindex created with parameters, and the retryable distinction, and its README says which release each of
those arrived in so the next reader can tell what is current.