Qdrant - vector search engine Since my last post about filtra | Neural Networks Engineering
Qdrant - vector search engine
Since my last post about filtrable HNSW
I was working on a new Search Engine to give this idea a proper implementation.
And I finally published an alpha version of the engine called Qdrant.
Development is still in an early stage, but it already provides ElasticSearch-like conditions must, should and must_not which you can combine to represent an arbitrary condition.
Use-cases
You might need Qdrant in cases when a vector could not fully represent a sought object.
For example, a neural network might model a visual appearance of a piece of clothing, but can hardly consider its stock availability.
With Qdrant you can assign this feature as a payload and use it for filtering.
Among the possible applications:
- Semantic search with facets
- Semantic search on map
- Matching engines - e.g. Candidates and job positions
- Personal recommendations
Technical highlights
Qdrant is written in Rust, the language specially designed for system programming - the building of services that are used by other services.
Rust is comparable in speed with C but also protects from data races what is crucial for database applications.
Push the crab if you are interested in more Rust-specific details of the project.
The engine uses write-ahead logging. Once it confirmed an update - it won't lose data even in case of power shut down.
You can already try it with Docker image:
docker pull generall/qdrant
Simple search request could look like this:
POST /test_collection/points/search
{
"filter": {
"should": [
{
"match": {
"key": "city",
"keyword": "London"
}
}
]
},
"vector": [0.2, 0.1, 0.9, 0.7],
"top": 3
}
All APIs are documented with OpenAPI 3.0.
It provides an easy way to generate client for any programming language.
I would highly appreciate any feedback on the project, and I will be grateful if you give it a star on GitHub.