Spaces:
Build error
Build error
Gouzi Mohaled
commited on
Commit
·
2fdbd5c
1
Parent(s):
84d2a97
Ajout du dossier docs
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- docs/CODE_OF_CONDUCT.md +128 -0
- docs/CONTRIBUTING.md +49 -0
- docs/DEVELOPMENT.md +247 -0
- docs/QUICK_START.md +209 -0
- docs/grpc/docs.md +0 -0
- docs/imgs/call-graph-profile.png +0 -0
- docs/imgs/flamegraph-profile.png +0 -0
- docs/logo.svg +138 -0
- docs/redoc/.gitignore +1 -0
- docs/redoc/default_version.js +1 -0
- docs/redoc/index.html +99 -0
- docs/redoc/master/openapi.json +0 -0
- docs/redoc/v0.10.0/openapi.json +0 -0
- docs/redoc/v0.10.1/openapi.json +0 -0
- docs/redoc/v0.10.2/openapi.json +0 -0
- docs/redoc/v0.10.3/openapi.json +0 -0
- docs/redoc/v0.10.4/openapi.json +0 -0
- docs/redoc/v0.10.5/openapi.json +0 -0
- docs/redoc/v0.11.0/openapi.json +0 -0
- docs/redoc/v0.11.1/openapi.json +0 -0
- docs/redoc/v0.11.2/openapi.json +0 -0
- docs/redoc/v0.11.3/openapi.json +0 -0
- docs/redoc/v0.11.4/openapi.json +0 -0
- docs/redoc/v0.11.5/openapi.json +0 -0
- docs/redoc/v0.11.6/openapi.json +0 -0
- docs/redoc/v0.11.7/openapi.json +0 -0
- docs/redoc/v0.4.2/openapi.json +2357 -0
- docs/redoc/v0.5.0/openapi.json +0 -0
- docs/redoc/v0.5.1/openapi.json +0 -0
- docs/redoc/v0.6.0/openapi.json +0 -0
- docs/redoc/v0.7.0/openapi.json +0 -0
- docs/redoc/v0.8.0/openapi.json +0 -0
- docs/redoc/v0.8.1/openapi.json +0 -0
- docs/redoc/v0.8.2/openapi.json +0 -0
- docs/redoc/v0.8.3/openapi.json +0 -0
- docs/redoc/v0.8.4/openapi.json +0 -0
- docs/redoc/v0.8.5/openapi.json +0 -0
- docs/redoc/v0.8.6/openapi.json +0 -0
- docs/redoc/v0.9.0/openapi.json +0 -0
- docs/redoc/v0.9.1/openapi.json +0 -0
- docs/redoc/v1.0.1/openapi.json +0 -0
- docs/redoc/v1.0.2/openapi.json +0 -0
- docs/redoc/v1.0.3/openapi.json +0 -0
- docs/redoc/v1.1.0/openapi.json +0 -0
- docs/redoc/v1.1.1/openapi.json +0 -0
- docs/redoc/v1.1.2/openapi.json +0 -0
- docs/redoc/v1.1.3/openapi.json +0 -0
- docs/redoc/v1.10.x/openapi.json +0 -0
- docs/redoc/v1.11.x/openapi.json +0 -0
- docs/redoc/v1.12.x/openapi.json +0 -0
docs/CODE_OF_CONDUCT.md
ADDED
@@ -0,0 +1,128 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Contributor Covenant Code of Conduct
|
2 |
+
|
3 |
+
## Our Pledge
|
4 |
+
|
5 |
+
We as members, contributors, and leaders pledge to make participation in our
|
6 |
+
community a harassment-free experience for everyone, regardless of age, body
|
7 |
+
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
8 |
+
identity and expression, level of experience, education, socio-economic status,
|
9 |
+
nationality, personal appearance, race, religion, or sexual identity
|
10 |
+
and orientation.
|
11 |
+
|
12 |
+
We pledge to act and interact in ways that contribute to an open, welcoming,
|
13 |
+
diverse, inclusive, and healthy community.
|
14 |
+
|
15 |
+
## Our Standards
|
16 |
+
|
17 |
+
Examples of behavior that contributes to a positive environment for our
|
18 |
+
community include:
|
19 |
+
|
20 |
+
* Demonstrating empathy and kindness toward other people
|
21 |
+
* Being respectful of differing opinions, viewpoints, and experiences
|
22 |
+
* Giving and gracefully accepting constructive feedback
|
23 |
+
* Accepting responsibility and apologizing to those affected by our mistakes,
|
24 |
+
and learning from the experience
|
25 |
+
* Focusing on what is best not just for us as individuals, but for the
|
26 |
+
overall community
|
27 |
+
|
28 |
+
Examples of unacceptable behavior include:
|
29 |
+
|
30 |
+
* The use of sexualized language or imagery, and sexual attention or
|
31 |
+
advances of any kind
|
32 |
+
* Trolling, insulting or derogatory comments, and personal or political attacks
|
33 |
+
* Public or private harassment
|
34 |
+
* Publishing others' private information, such as a physical or email
|
35 |
+
address, without their explicit permission
|
36 |
+
* Other conduct which could reasonably be considered inappropriate in a
|
37 |
+
professional setting
|
38 |
+
|
39 |
+
## Enforcement Responsibilities
|
40 |
+
|
41 |
+
Community leaders are responsible for clarifying and enforcing our standards of
|
42 |
+
acceptable behavior and will take appropriate and fair corrective action in
|
43 |
+
response to any behavior that they deem inappropriate, threatening, offensive,
|
44 |
+
or harmful.
|
45 |
+
|
46 |
+
Community leaders have the right and responsibility to remove, edit, or reject
|
47 |
+
comments, commits, code, wiki edits, issues, and other contributions that are
|
48 |
+
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
49 |
+
decisions when appropriate.
|
50 |
+
|
51 |
+
## Scope
|
52 |
+
|
53 |
+
This Code of Conduct applies within all community spaces, and also applies when
|
54 |
+
an individual is officially representing the community in public spaces.
|
55 |
+
Examples of representing our community include using an official e-mail address,
|
56 |
+
posting via an official social media account, or acting as an appointed
|
57 |
+
representative at an online or offline event.
|
58 |
+
|
59 |
+
## Enforcement
|
60 |
+
|
61 |
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
62 |
+
reported to the community leaders responsible for enforcement at
|
63 |
+
email: [email protected].
|
64 |
+
All complaints will be reviewed and investigated promptly and fairly.
|
65 |
+
|
66 |
+
All community leaders are obligated to respect the privacy and security of the
|
67 |
+
reporter of any incident.
|
68 |
+
|
69 |
+
## Enforcement Guidelines
|
70 |
+
|
71 |
+
Community leaders will follow these Community Impact Guidelines in determining
|
72 |
+
the consequences for any action they deem in violation of this Code of Conduct:
|
73 |
+
|
74 |
+
### 1. Correction
|
75 |
+
|
76 |
+
**Community Impact**: Use of inappropriate language or other behavior deemed
|
77 |
+
unprofessional or unwelcome in the community.
|
78 |
+
|
79 |
+
**Consequence**: A private, written warning from community leaders, providing
|
80 |
+
clarity around the nature of the violation and an explanation of why the
|
81 |
+
behavior was inappropriate. A public apology may be requested.
|
82 |
+
|
83 |
+
### 2. Warning
|
84 |
+
|
85 |
+
**Community Impact**: A violation through a single incident or series
|
86 |
+
of actions.
|
87 |
+
|
88 |
+
**Consequence**: A warning with consequences for continued behavior. No
|
89 |
+
interaction with the people involved, including unsolicited interaction with
|
90 |
+
those enforcing the Code of Conduct, for a specified period of time. This
|
91 |
+
includes avoiding interactions in community spaces as well as external channels
|
92 |
+
like social media. Violating these terms may lead to a temporary or
|
93 |
+
permanent ban.
|
94 |
+
|
95 |
+
### 3. Temporary Ban
|
96 |
+
|
97 |
+
**Community Impact**: A serious violation of community standards, including
|
98 |
+
sustained inappropriate behavior.
|
99 |
+
|
100 |
+
**Consequence**: A temporary ban from any sort of interaction or public
|
101 |
+
communication with the community for a specified period of time. No public or
|
102 |
+
private interaction with the people involved, including unsolicited interaction
|
103 |
+
with those enforcing the Code of Conduct, is allowed during this period.
|
104 |
+
Violating these terms may lead to a permanent ban.
|
105 |
+
|
106 |
+
### 4. Permanent Ban
|
107 |
+
|
108 |
+
**Community Impact**: Demonstrating a pattern of violation of community
|
109 |
+
standards, including sustained inappropriate behavior, harassment of an
|
110 |
+
individual, or aggression toward or disparagement of classes of individuals.
|
111 |
+
|
112 |
+
**Consequence**: A permanent ban from any sort of public interaction within
|
113 |
+
the community.
|
114 |
+
|
115 |
+
## Attribution
|
116 |
+
|
117 |
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
118 |
+
version 2.0, available at
|
119 |
+
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
120 |
+
|
121 |
+
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
122 |
+
enforcement ladder](https://github.com/mozilla/diversity).
|
123 |
+
|
124 |
+
[homepage]: https://www.contributor-covenant.org
|
125 |
+
|
126 |
+
For answers to common questions about this code of conduct, see the FAQ at
|
127 |
+
https://www.contributor-covenant.org/faq. Translations are available at
|
128 |
+
https://www.contributor-covenant.org/translations.
|
docs/CONTRIBUTING.md
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Contributing to Qdrant
|
2 |
+
We love your input! We want to make contributing to this project as easy and transparent as possible, whether it's:
|
3 |
+
|
4 |
+
- Reporting a bug
|
5 |
+
- Discussing the current state of the code
|
6 |
+
- Submitting a fix
|
7 |
+
- Proposing new features
|
8 |
+
|
9 |
+
## We Develop with GitHub
|
10 |
+
We use github to host code, to track issues and feature requests, as well as accept pull requests.
|
11 |
+
|
12 |
+
## We Use [GitHub Flow](https://guides.github.com/introduction/flow/index.html), So All Code Changes Happen Through Pull Requests
|
13 |
+
Pull requests are the best way to propose changes to the codebase (we use [GitHub Flow](https://docs.github.com/en/get-started/quickstart/github-flow)). We actively welcome your pull requests:
|
14 |
+
|
15 |
+
1. Fork the repo and create your branch from `dev`.
|
16 |
+
2. If you've added code that should be tested, add tests.
|
17 |
+
3. If you've changed APIs, update the documentation and API Schema definitions (see [development docs](https://github.com/qdrant/qdrant/blob/master/docs/DEVELOPMENT.md#api-changes))
|
18 |
+
4. Ensure the test suite passes.
|
19 |
+
5. Make sure your code lints (with cargo).
|
20 |
+
6. Issue that pull request!
|
21 |
+
|
22 |
+
## Any contributions you make will be under the Apache License 2.0
|
23 |
+
In short, when you submit code changes, your submissions are understood to be under the same [Apache License 2.0](https://choosealicense.com/licenses/apache-2.0/) that covers the project. Feel free to contact the maintainers if that's a concern.
|
24 |
+
|
25 |
+
## Report bugs using GitHub's [issues](https://github.com/qdrant/qdrant/issues)
|
26 |
+
We use GitHub issues to track public bugs. Report a bug by [opening a new issue](https://github.com/qdrant/qdrant/issues/new/choose); it's that easy!
|
27 |
+
|
28 |
+
## Write bug reports with detail, background, and sample code
|
29 |
+
|
30 |
+
**Great Bug Reports** tend to have:
|
31 |
+
|
32 |
+
- A quick summary and/or background
|
33 |
+
- Steps to reproduce
|
34 |
+
- Be specific!
|
35 |
+
- Give sample code if you can.
|
36 |
+
- What you expected would happen
|
37 |
+
- What actually happens
|
38 |
+
- Notes (possibly including why you think this might be happening, or stuff you tried that didn't work)
|
39 |
+
|
40 |
+
## Use a Consistent Coding Style
|
41 |
+
|
42 |
+
If you are modifying Rust code, make sure it has no warnings from Cargo and follow [Rust code style](https://doc.rust-lang.org/1.0.0/style/).
|
43 |
+
The project uses [rustfmt](https://github.com/rust-lang/rustfmt) formatter. Please ensure to run it using the
|
44 |
+
```cargo +nightly fmt --all``` command. The project also use [clippy](https://github.com/rust-lang/rust-clippy) lint collection,
|
45 |
+
so please ensure running ``cargo clippy --workspace --all-features`` before submitting the PR.
|
46 |
+
|
47 |
+
## License
|
48 |
+
By contributing, you agree that your contributions will be licensed under its Apache License 2.0.
|
49 |
+
|
docs/DEVELOPMENT.md
ADDED
@@ -0,0 +1,247 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
# Developer's guide to Qdrant
|
3 |
+
|
4 |
+
|
5 |
+
## Build Qdrant
|
6 |
+
|
7 |
+
### Docker 🐳
|
8 |
+
|
9 |
+
Build your own from source
|
10 |
+
|
11 |
+
```bash
|
12 |
+
docker build . --tag=qdrant/qdrant
|
13 |
+
```
|
14 |
+
|
15 |
+
Or use latest pre-built image from [DockerHub](https://hub.docker.com/r/qdrant/qdrant)
|
16 |
+
|
17 |
+
```bash
|
18 |
+
docker pull qdrant/qdrant
|
19 |
+
```
|
20 |
+
|
21 |
+
To run the container, use the command:
|
22 |
+
|
23 |
+
```bash
|
24 |
+
docker run -p 6333:6333 qdrant/qdrant
|
25 |
+
```
|
26 |
+
|
27 |
+
And once you need a fine-grained setup, you can also define a storage path and custom configuration:
|
28 |
+
|
29 |
+
```bash
|
30 |
+
docker run -p 6333:6333 \
|
31 |
+
-v $(pwd)/path/to/data:/qdrant/storage \
|
32 |
+
-v $(pwd)/path/to/snapshots:/qdrant/snapshots \
|
33 |
+
-v $(pwd)/path/to/custom_config.yaml:/qdrant/config/production.yaml \
|
34 |
+
qdrant/qdrant
|
35 |
+
```
|
36 |
+
|
37 |
+
* `/qdrant/storage` - is the place where Qdrant persists all your data.
|
38 |
+
Make sure to mount it as a volume, otherwise docker will drop it with the container.
|
39 |
+
- `/qdrant/snapshots` - is the place where Qdrant stores [snapshots](https://qdrant.tech/documentation/concepts/snapshots/)
|
40 |
+
* `/qdrant/config/production.yaml` - is the file with engine configuration. You can override any value from the [reference config](https://github.com/qdrant/qdrant/blob/master/config/config.yaml)
|
41 |
+
|
42 |
+
Now Qdrant should be accessible at [localhost:6333](http://localhost:6333/).
|
43 |
+
|
44 |
+
|
45 |
+
### Local development
|
46 |
+
#### Linux/Debian/MacOS
|
47 |
+
To run Qdrant on local development environment you need to install below:
|
48 |
+
- Install Rust, follow: [install rust](https://www.rust-lang.org/tools/install)
|
49 |
+
- Install `rustfmt` toolchain for Rust
|
50 |
+
```shell
|
51 |
+
rustup component add rustfmt
|
52 |
+
```
|
53 |
+
- Install dependencies:
|
54 |
+
```shell
|
55 |
+
sudo apt-get update -y
|
56 |
+
sudo apt-get upgrade -y
|
57 |
+
sudo apt-get install -y curl unzip gcc-multilib \
|
58 |
+
clang cmake jq \
|
59 |
+
g++-9-aarch64-linux-gnu \
|
60 |
+
gcc-9-aarch64-linux-gnu
|
61 |
+
```
|
62 |
+
- Install `protoc` from source
|
63 |
+
```shell
|
64 |
+
PROTOC_VERSION=22.2
|
65 |
+
PKG_NAME=$(uname -s | awk '{print ($1 == "Darwin") ? "osx-universal_binary" : (($1 == "Linux") ? "linux-x86_64" : "")}')
|
66 |
+
|
67 |
+
# curl `proto` source file
|
68 |
+
curl -LO https://github.com/protocolbuffers/protobuf/releases//download/v$PROTOC_VERSION/protoc-$PROTOC_VERSION-$PKG_NAME.zip
|
69 |
+
|
70 |
+
unzip protoc-$PROTOC_VERSION-$PKG_NAME.zip -d $HOME/.local
|
71 |
+
|
72 |
+
export PATH="$PATH:$HOME/.local/bin"
|
73 |
+
|
74 |
+
# remove source file if not needed
|
75 |
+
rm protoc-$PROTOC_VERSION-$PKG_NAME.zip
|
76 |
+
|
77 |
+
# check installed `protoc` version
|
78 |
+
protoc --version
|
79 |
+
```
|
80 |
+
- Build and run the app
|
81 |
+
```shell
|
82 |
+
cargo build --release --bin qdrant
|
83 |
+
|
84 |
+
./target/release/qdrant
|
85 |
+
```
|
86 |
+
- Install Python dependencies for testing
|
87 |
+
```shell
|
88 |
+
poetry -C tests install --sync
|
89 |
+
```
|
90 |
+
Then you could use `poetry -C run pytest tests/openapi` and `poetry -C run pytest tests/consensus_tests` to run the tests.
|
91 |
+
- Use the web UI
|
92 |
+
|
93 |
+
Web UI repo is [in a separate repo](https://github.com/qdrant/qdrant-web-ui), but there's a utility script to sync it to the `static` folder:
|
94 |
+
```shell
|
95 |
+
./tools/sync-web-ui.sh
|
96 |
+
```
|
97 |
+
|
98 |
+
### Nix/NixOS
|
99 |
+
If you are using [Nix package manager](https://nixos.org/) (available for Linux and MacOS), you can run `nix-shell` in the project root to get a shell with all dependencies installed.
|
100 |
+
It includes dependencies to build Rust code as well as to run Python tests and various tools in the `./tools` directory.
|
101 |
+
|
102 |
+
## Profiling
|
103 |
+
|
104 |
+
There are several benchmarks implemented in Qdrant. Benchmarks are not included in CI/CD and might take some time to execute.
|
105 |
+
So the expected approach to benchmarking is to run only ones which might be affected by your changes.
|
106 |
+
|
107 |
+
To run benchmark, use the following command inside a related sub-crate:
|
108 |
+
|
109 |
+
```bash
|
110 |
+
cargo bench --bench name_of_benchmark
|
111 |
+
```
|
112 |
+
|
113 |
+
In this case you will see the execution timings and, if you launched this bench earlier, the difference in execution time.
|
114 |
+
|
115 |
+
Example output:
|
116 |
+
|
117 |
+
```
|
118 |
+
scoring-vector/basic-score-point
|
119 |
+
time: [111.81 us 112.07 us 112.31 us]
|
120 |
+
change: [+19.567% +20.454% +21.404%] (p = 0.00 < 0.05)
|
121 |
+
Performance has regressed.
|
122 |
+
Found 9 outliers among 100 measurements (9.00%)
|
123 |
+
3 (3.00%) low severe
|
124 |
+
3 (3.00%) low mild
|
125 |
+
2 (2.00%) high mild
|
126 |
+
1 (1.00%) high severe
|
127 |
+
scoring-vector/basic-score-point-10x
|
128 |
+
time: [111.86 us 112.44 us 113.04 us]
|
129 |
+
change: [-1.6120% -0.5554% +0.5103%] (p = 0.32 > 0.05)
|
130 |
+
No change in performance detected.
|
131 |
+
Found 1 outliers among 100 measurements (1.00%)
|
132 |
+
1 (1.00%) high mild
|
133 |
+
```
|
134 |
+
|
135 |
+
|
136 |
+
### FlameGraph and call-graph visualisation
|
137 |
+
To run benchmarks with profiler to generate FlameGraph - use the following command:
|
138 |
+
|
139 |
+
```bash
|
140 |
+
cargo bench --bench name_of_benchmark -- --profile-time=60
|
141 |
+
```
|
142 |
+
|
143 |
+
This command will run each benchmark iterator for `60` seconds and generate FlameGraph svg along with profiling records files.
|
144 |
+
These records could later be used to generate visualisation of the call-graph.
|
145 |
+
|
146 |
+

|
147 |
+
|
148 |
+
Use [pprof](https://github.com/google/pprof) and the following command to generate `svg` with a call graph:
|
149 |
+
|
150 |
+
```bash
|
151 |
+
~/go/bin/pprof -output=profile.svg -svg ${qdrant_root}/target/criterion/${benchmark_name}/${function_name}/profile/profile.pb
|
152 |
+
```
|
153 |
+
|
154 |
+

|
155 |
+
|
156 |
+
### Real-time profiling
|
157 |
+
|
158 |
+
Qdrant have basic [`tracing`] support with [`Tracy`] profiler and [`tokio-console`] integrations
|
159 |
+
that can be enabled with optional features.
|
160 |
+
|
161 |
+
- [`tracing`] is an _optional_ dependency that can be enabled with `tracing` feature
|
162 |
+
- `tracy` feature enables [`Tracy`] profiler integration
|
163 |
+
- `console` feature enables [`tokio-console`] integration
|
164 |
+
- note, that you'll also have to [pass `--cfg tokio_unstable` arguments to `rustc`][tokio-tracing] to enable this feature
|
165 |
+
- by default [`tokio-console`] binds to `127.0.0.1:6669`
|
166 |
+
- if you want to connect [`tokio-console`] to Qdrant instance running inside a Docker container
|
167 |
+
or on remote server, you can define `TOKIO_CONSOLE_BIND` when running Qdrant to override it
|
168 |
+
(e.g., `TOKIO_CONSOLE_BIND=0.0.0.0:6669` to listen on all interfaces)
|
169 |
+
- `tokio-tracing` feature explicitly enables [`Tokio` crate tracing][tokio-tracing]
|
170 |
+
- note, that you'll also have to [pass `--cfg tokio_unstable` arguments to `rustc`][tokio-tracing] to enable this feature
|
171 |
+
- this is required (and enabled automatically) by the `console` feature
|
172 |
+
- but you can enable it explicitly with the `tracy` feature, to see Tokio traces in [`Tracy`] profiler
|
173 |
+
|
174 |
+
Qdrant code is **not** instrumented by default, so you'll have to manually add `#[tracing::instrument]` attributes
|
175 |
+
on functions and methods that you want to profile.
|
176 |
+
|
177 |
+
Qdrant uses [`tracing-log`] as the [`log`] backend, so `log` and `log-always` features of the [`tracing`] crate
|
178 |
+
[should _not_ be enabled][tracing-log-warning]!
|
179 |
+
|
180 |
+
```rust
|
181 |
+
// `tracing` crate is an *optional* dependency in `lib/*` crates, so if you want the code to compile
|
182 |
+
// when `tracing` feature is disabled, you have to use `#[cfg_attr(...)]`...
|
183 |
+
//
|
184 |
+
// See https://doc.rust-lang.org/reference/conditional-compilation.html#the-cfg_attr-attribute
|
185 |
+
#[cfg_attr(feature = "tracing", tracing::instrument)]
|
186 |
+
fn my_function(some_parameter: String) {
|
187 |
+
// ...
|
188 |
+
}
|
189 |
+
|
190 |
+
// ...or if you just want to do some quick-and-dirty profiling, you can use `#[tracing::instrument]`
|
191 |
+
// directly, just don't forget to add `--features tracing` when running `cargo` (or add `tracing`
|
192 |
+
// to default features in `Cargo.toml`)
|
193 |
+
#[tracing::instrument]
|
194 |
+
fn some_other_function() {
|
195 |
+
// ...
|
196 |
+
}
|
197 |
+
```
|
198 |
+
|
199 |
+
[`tracing`]: https://docs.rs/tracing/latest/tracing/
|
200 |
+
[`Tracy`]: https://github.com/wolfpld/tracy
|
201 |
+
[`tokio-console`]: https://docs.rs/tokio-console/latest/tokio_console/
|
202 |
+
[tokio-tracing]: https://docs.rs/tokio/latest/tokio/#unstable-features
|
203 |
+
[`tracing-log`]: https://docs.rs/tracing-log/latest/tracing_log/
|
204 |
+
[`log`]: https://docs.rs/log/latest/log/
|
205 |
+
[tracing-log-warning]: https://docs.rs/tracing-log/latest/tracing_log/#caution-mixing-both-conversions
|
206 |
+
|
207 |
+
## API changes
|
208 |
+
|
209 |
+
### REST
|
210 |
+
|
211 |
+
Qdrant uses the [openapi](https://spec.openapis.org/oas/latest.html) specification to document its API.
|
212 |
+
|
213 |
+
This means changes to the API must be followed by changes to the specification.
|
214 |
+
This is enforced by CI.
|
215 |
+
|
216 |
+
Here is a quick step-by-step guide:
|
217 |
+
|
218 |
+
1. code endpoints and model in Rust
|
219 |
+
2. change specs in `/openapi/*ytt.yaml`
|
220 |
+
3. add new schema definitions to `src/schema_generator.rs`
|
221 |
+
4. run `./tools/generate_openapi_models.sh` to generate specs
|
222 |
+
5. update integration tests `tests/openapi` and run them with `pytest tests/openapi` (use poetry or nix to get `pytest`)
|
223 |
+
6. expose file by starting an HTTP server, for instance `python -m http.server`, in `/docs/redoc`
|
224 |
+
7. validate specs by browsing redoc on `http://localhost:8000/?v=master`
|
225 |
+
8. validate `openapi-merged.yaml` using [swagger editor](https://editor.swagger.io/)
|
226 |
+
|
227 |
+
### gRPC
|
228 |
+
|
229 |
+
Qdrant uses [tonic](https://github.com/hyperium/tonic) to serve gRPC traffic.
|
230 |
+
|
231 |
+
Our protocol buffers are defined in `lib/api/src/grpc/proto/*.proto`
|
232 |
+
|
233 |
+
1. define request and response types using protocol buffers (use [oneOf](https://developers.google.com/protocol-buffers/docs/proto3#oneof) for enums payloads)
|
234 |
+
2. specify RPC methods inside the service definition using protocol buffers
|
235 |
+
3. `cargo build` will generate the struct definitions and a service trait
|
236 |
+
4. implement the service trait in Rust
|
237 |
+
5. start server `cargo run --bin qdrant`
|
238 |
+
6. run integration test `./tests/basic_grpc_test.sh`
|
239 |
+
7. generate docs `./tools/generate_grpc_docs.sh`
|
240 |
+
|
241 |
+
Here is a good [tonic tutorial](https://github.com/hyperium/tonic/blob/master/examples/routeguide-tutorial.md#defining-the-service) for reference.
|
242 |
+
|
243 |
+
### System integration
|
244 |
+
|
245 |
+
On top of the API definitions, Qdrant has a few system integrations that need to be considered when making changes:
|
246 |
+
1. add new endpoints to the metrics allow lists in `src/common/metrics.rs`
|
247 |
+
2. test the JWT integration in `tests/auth_tests`
|
docs/QUICK_START.md
ADDED
@@ -0,0 +1,209 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Quick Start
|
2 |
+
|
3 |
+
This example covers the most basic use-case - collection creation and basic vector search.
|
4 |
+
For additional information please refer to the [API documentation](https://api.qdrant.tech/).
|
5 |
+
|
6 |
+
## Docker 🐳
|
7 |
+
|
8 |
+
Use latest pre-built image from [DockerHub](https://hub.docker.com/r/qdrant/qdrant)
|
9 |
+
|
10 |
+
```bash
|
11 |
+
docker pull qdrant/qdrant
|
12 |
+
```
|
13 |
+
|
14 |
+
Run it with default configuration:
|
15 |
+
|
16 |
+
```bash
|
17 |
+
docker run -p 6333:6333 qdrant/qdrant
|
18 |
+
```
|
19 |
+
|
20 |
+
Build your own from source
|
21 |
+
|
22 |
+
```bash
|
23 |
+
docker build . --tag=qdrant/qdrant
|
24 |
+
```
|
25 |
+
|
26 |
+
And once you need a fine-grained setup, you can also define a storage path and custom configuration:
|
27 |
+
|
28 |
+
```bash
|
29 |
+
docker run -p 6333:6333 \
|
30 |
+
-v $(pwd)/path/to/data:/qdrant/storage \
|
31 |
+
-v $(pwd)/path/to/snapshots:/qdrant/snapshots \
|
32 |
+
-v $(pwd)/path/to/custom_config.yaml:/qdrant/config/production.yaml \
|
33 |
+
qdrant/qdrant
|
34 |
+
```
|
35 |
+
|
36 |
+
- `/qdrant/storage` - is the place where Qdrant persists all your data.
|
37 |
+
Make sure to mount it as a volume, otherwise docker will drop it with the container.
|
38 |
+
- `/qdrant/snapshots` - is the place where Qdrant stores [snapshots](https://qdrant.tech/documentation/concepts/snapshots/)
|
39 |
+
- `/qdrant/config/production.yaml` - is the file with engine configuration. You can override any value from the [reference config](https://github.com/qdrant/qdrant/blob/master/config/config.yaml). In a real production environment, you should enable authentication by setting `service.apiKey`.
|
40 |
+
- For production environments, consider also setting [`--read-only`](https://docs.docker.com/reference/cli/docker/container/run/#read-only) and `--user=1000:2000` to further secure your Qdrant instance. Or use [our Helm chart](https://github.com/qdrant/qdrant-helm) or [Qdrant Cloud](https://qdrant.tech/documentation/cloud/) which sets these by default.
|
41 |
+
|
42 |
+
Now Qdrant should be accessible at [localhost:6333](http://localhost:6333/).
|
43 |
+
|
44 |
+
## Create collection
|
45 |
+
|
46 |
+
First - let's create a collection with dot-production metric.
|
47 |
+
|
48 |
+
```bash
|
49 |
+
curl -X PUT 'http://localhost:6333/collections/test_collection' \
|
50 |
+
-H 'Content-Type: application/json' \
|
51 |
+
--data-raw '{
|
52 |
+
"vectors": {
|
53 |
+
"size": 4,
|
54 |
+
"distance": "Dot"
|
55 |
+
}
|
56 |
+
}'
|
57 |
+
```
|
58 |
+
|
59 |
+
Expected response:
|
60 |
+
|
61 |
+
```json
|
62 |
+
{
|
63 |
+
"result": true,
|
64 |
+
"status": "ok",
|
65 |
+
"time": 0.031095451
|
66 |
+
}
|
67 |
+
```
|
68 |
+
|
69 |
+
We can ensure that collection was created:
|
70 |
+
|
71 |
+
```bash
|
72 |
+
curl 'http://localhost:6333/collections/test_collection'
|
73 |
+
```
|
74 |
+
|
75 |
+
Expected response:
|
76 |
+
|
77 |
+
```json
|
78 |
+
{
|
79 |
+
"result": {
|
80 |
+
"status": "green",
|
81 |
+
"vectors_count": 0,
|
82 |
+
"segments_count": 5,
|
83 |
+
"disk_data_size": 0,
|
84 |
+
"ram_data_size": 0,
|
85 |
+
"config": {
|
86 |
+
"params": {
|
87 |
+
"vectors": {
|
88 |
+
"size": 4,
|
89 |
+
"distance": "Dot"
|
90 |
+
}
|
91 |
+
},
|
92 |
+
"hnsw_config": {
|
93 |
+
"m": 16,
|
94 |
+
"ef_construct": 100,
|
95 |
+
"full_scan_threshold": 10000
|
96 |
+
},
|
97 |
+
"optimizer_config": {
|
98 |
+
"deleted_threshold": 0.2,
|
99 |
+
"vacuum_min_vector_number": 1000,
|
100 |
+
"default_segment_number": 2,
|
101 |
+
"max_segment_size": null,
|
102 |
+
"memmap_threshold": null,
|
103 |
+
"indexing_threshold": 20000,
|
104 |
+
"flush_interval_sec": 5,
|
105 |
+
"max_optimization_threads": null
|
106 |
+
},
|
107 |
+
"wal_config": {
|
108 |
+
"wal_capacity_mb": 32,
|
109 |
+
"wal_segments_ahead": 0
|
110 |
+
}
|
111 |
+
}
|
112 |
+
},
|
113 |
+
"status": "ok",
|
114 |
+
"time": 2.1199e-5
|
115 |
+
}
|
116 |
+
```
|
117 |
+
|
118 |
+
## Add points
|
119 |
+
|
120 |
+
Let's now add vectors with some payload:
|
121 |
+
|
122 |
+
```bash
|
123 |
+
curl -L -X PUT 'http://localhost:6333/collections/test_collection/points?wait=true' \
|
124 |
+
-H 'Content-Type: application/json' \
|
125 |
+
--data-raw '{
|
126 |
+
"points": [
|
127 |
+
{"id": 1, "vector": [0.05, 0.61, 0.76, 0.74], "payload": {"city": "Berlin"}},
|
128 |
+
{"id": 2, "vector": [0.19, 0.81, 0.75, 0.11], "payload": {"city": ["Berlin", "London"] }},
|
129 |
+
{"id": 3, "vector": [0.36, 0.55, 0.47, 0.94], "payload": {"city": ["Berlin", "Moscow"] }},
|
130 |
+
{"id": 4, "vector": [0.18, 0.01, 0.85, 0.80], "payload": {"city": ["London", "Moscow"] }},
|
131 |
+
{"id": 5, "vector": [0.24, 0.18, 0.22, 0.44], "payload": {"count": [0] }},
|
132 |
+
{"id": 6, "vector": [0.35, 0.08, 0.11, 0.44]}
|
133 |
+
]
|
134 |
+
}'
|
135 |
+
```
|
136 |
+
|
137 |
+
Expected response:
|
138 |
+
|
139 |
+
```json
|
140 |
+
{
|
141 |
+
"result": {
|
142 |
+
"operation_id": 0,
|
143 |
+
"status": "completed"
|
144 |
+
},
|
145 |
+
"status": "ok",
|
146 |
+
"time": 0.000206061
|
147 |
+
}
|
148 |
+
```
|
149 |
+
|
150 |
+
## Search with filtering
|
151 |
+
|
152 |
+
Let's start with a basic request:
|
153 |
+
|
154 |
+
```bash
|
155 |
+
curl -L -X POST 'http://localhost:6333/collections/test_collection/points/search' \
|
156 |
+
-H 'Content-Type: application/json' \
|
157 |
+
--data-raw '{
|
158 |
+
"vector": [0.2,0.1,0.9,0.7],
|
159 |
+
"top": 3
|
160 |
+
}'
|
161 |
+
```
|
162 |
+
|
163 |
+
Expected response:
|
164 |
+
|
165 |
+
```json
|
166 |
+
{
|
167 |
+
"result": [
|
168 |
+
{ "id": 4, "score": 1.362, "payload": null, "version": 0 },
|
169 |
+
{ "id": 1, "score": 1.273, "payload": null, "version": 0 },
|
170 |
+
{ "id": 3, "score": 1.208, "payload": null, "version": 0 }
|
171 |
+
],
|
172 |
+
"status": "ok",
|
173 |
+
"time": 0.000055785
|
174 |
+
}
|
175 |
+
```
|
176 |
+
|
177 |
+
But result is different if we add a filter:
|
178 |
+
|
179 |
+
```bash
|
180 |
+
curl -L -X POST 'http://localhost:6333/collections/test_collection/points/search' \
|
181 |
+
-H 'Content-Type: application/json' \
|
182 |
+
--data-raw '{
|
183 |
+
"filter": {
|
184 |
+
"should": [
|
185 |
+
{
|
186 |
+
"key": "city",
|
187 |
+
"match": {
|
188 |
+
"value": "London"
|
189 |
+
}
|
190 |
+
}
|
191 |
+
]
|
192 |
+
},
|
193 |
+
"vector": [0.2, 0.1, 0.9, 0.7],
|
194 |
+
"top": 3
|
195 |
+
}'
|
196 |
+
```
|
197 |
+
|
198 |
+
Expected response:
|
199 |
+
|
200 |
+
```json
|
201 |
+
{
|
202 |
+
"result": [
|
203 |
+
{ "id": 4, "score": 1.362 },
|
204 |
+
{ "id": 2, "score": 0.871 }
|
205 |
+
],
|
206 |
+
"status": "ok",
|
207 |
+
"time": 0.000093972
|
208 |
+
}
|
209 |
+
```
|
docs/grpc/docs.md
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/imgs/call-graph-profile.png
ADDED
![]() |
docs/imgs/flamegraph-profile.png
ADDED
![]() |
docs/logo.svg
ADDED
|
docs/redoc/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
/openapi.json
|
docs/redoc/default_version.js
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
const defaultApiVersion = 'v1.12.x';
|
docs/redoc/index.html
ADDED
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<title>ReDoc</title>
|
5 |
+
<!-- needed for adaptive design -->
|
6 |
+
<meta charset="utf-8"/>
|
7 |
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
8 |
+
<link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,700|Roboto:300,400,700" rel="stylesheet">
|
9 |
+
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
|
10 |
+
integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
|
11 |
+
|
12 |
+
<!--
|
13 |
+
ReDoc doesn't change outer page styles
|
14 |
+
-->
|
15 |
+
<style>
|
16 |
+
body {
|
17 |
+
margin: 0;
|
18 |
+
padding: 0;
|
19 |
+
}
|
20 |
+
</style>
|
21 |
+
<script src="./default_version.js"></script>
|
22 |
+
|
23 |
+
<script>
|
24 |
+
const url_string = window.location.href;
|
25 |
+
const url = new URL(url_string);
|
26 |
+
const version = url.searchParams.get("v") || defaultApiVersion;
|
27 |
+
</script>
|
28 |
+
</head>
|
29 |
+
<body>
|
30 |
+
<nav class="navbar navbar-light justify-content-between" style="background-color: rgb(250, 250, 250);">
|
31 |
+
<a class="navbar-brand" href="#">
|
32 |
+
<img src="../logo.svg" height="30">
|
33 |
+
</a>
|
34 |
+
|
35 |
+
<div class="btn-group">
|
36 |
+
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true"
|
37 |
+
aria-expanded="false">
|
38 |
+
Version
|
39 |
+
</button>
|
40 |
+
<div class="dropdown-menu dropdown-menu-right">
|
41 |
+
<a href="?v=master" class="dropdown-item" type="button">master</a>
|
42 |
+
<a href="?v=v1.12.x" class="dropdown-item" type="button">v1.12.x</a>
|
43 |
+
<a href="?v=v1.11.x" class="dropdown-item" type="button">v1.11.x</a>
|
44 |
+
<a href="?v=v1.10.x" class="dropdown-item" type="button">v1.10.x</a>
|
45 |
+
<a href="?v=v1.9.x" class="dropdown-item" type="button">v1.9.x</a>
|
46 |
+
<a href="?v=v1.8.x" class="dropdown-item" type="button">v1.8.x</a>
|
47 |
+
<a href="?v=v1.7.x" class="dropdown-item" type="button">v1.7.x</a>
|
48 |
+
<a href="?v=v1.6.x" class="dropdown-item" type="button">v1.6.x</a>
|
49 |
+
<a href="?v=v1.5.x" class="dropdown-item" type="button">v1.5.x</a>
|
50 |
+
<a href="?v=v1.4.x" class="dropdown-item" type="button">v1.4.x</a>
|
51 |
+
<a href="?v=v1.3.x" class="dropdown-item" type="button">v1.3.x</a>
|
52 |
+
<a href="?v=v1.2.x" class="dropdown-item" type="button">v1.2.x</a>
|
53 |
+
<a href="?v=v1.1.3" class="dropdown-item" type="button">v1.1.3</a>
|
54 |
+
<a href="?v=v1.1.2" class="dropdown-item" type="button">v1.1.2</a>
|
55 |
+
<a href="?v=v1.1.1" class="dropdown-item" type="button">v1.1.1</a>
|
56 |
+
<a href="?v=v1.1.0" class="dropdown-item" type="button">v1.1.0</a>
|
57 |
+
<a href="?v=v1.0.3" class="dropdown-item" type="button">v1.0.3</a>
|
58 |
+
<a href="?v=v1.0.2" class="dropdown-item" type="button">v1.0.2</a>
|
59 |
+
<a href="?v=v1.0.1" class="dropdown-item" type="button">v1.0.1</a>
|
60 |
+
<a href="?v=v0.11.7" class="dropdown-item" type="button">v0.11.7</a>
|
61 |
+
</div>
|
62 |
+
</div>
|
63 |
+
|
64 |
+
</nav>
|
65 |
+
|
66 |
+
<redoc id="redoc-container" spec-url='./openapi.json' theme='
|
67 |
+
{
|
68 |
+
"colors": {
|
69 |
+
"primary": {
|
70 |
+
"main": "#bc1439"
|
71 |
+
}
|
72 |
+
},
|
73 |
+
"rightPanel": {
|
74 |
+
"backgroundColor": "#182b3a"
|
75 |
+
},
|
76 |
+
"codeBlock": {
|
77 |
+
"backgroundColor": "#182b3a"
|
78 |
+
}
|
79 |
+
}
|
80 |
+
'></redoc>
|
81 |
+
|
82 |
+
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
83 |
+
integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
|
84 |
+
crossorigin="anonymous"></script>
|
85 |
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"
|
86 |
+
integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49"
|
87 |
+
crossorigin="anonymous"></script>
|
88 |
+
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"
|
89 |
+
integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy"
|
90 |
+
crossorigin="anonymous"></script>
|
91 |
+
|
92 |
+
<script>
|
93 |
+
$('#redoc-container').attr("spec-url", "./" + version + "/openapi.json");
|
94 |
+
</script>
|
95 |
+
|
96 |
+
<script src="https://cdn.jsdelivr.net/npm/redoc@next/bundles/redoc.standalone.js"></script>
|
97 |
+
|
98 |
+
</body>
|
99 |
+
</html>
|
docs/redoc/master/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.10.0/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.10.1/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.10.2/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.10.3/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.10.4/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.10.5/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.11.0/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.11.1/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.11.2/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.11.3/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.11.4/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.11.5/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.11.6/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.11.7/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.4.2/openapi.json
ADDED
@@ -0,0 +1,2357 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"components": {
|
3 |
+
"schemas": {
|
4 |
+
"AliasOperations": {
|
5 |
+
"anyOf": [
|
6 |
+
{
|
7 |
+
"additionalProperties": false,
|
8 |
+
"description": "Create alternative name for a collection. Collection will be available under both names for search, retrieve,",
|
9 |
+
"properties": {
|
10 |
+
"create_alias": {
|
11 |
+
"properties": {
|
12 |
+
"alias_name": {
|
13 |
+
"type": "string"
|
14 |
+
},
|
15 |
+
"collection_name": {
|
16 |
+
"type": "string"
|
17 |
+
}
|
18 |
+
},
|
19 |
+
"required": [
|
20 |
+
"alias_name",
|
21 |
+
"collection_name"
|
22 |
+
],
|
23 |
+
"type": "object"
|
24 |
+
}
|
25 |
+
},
|
26 |
+
"required": [
|
27 |
+
"create_alias"
|
28 |
+
],
|
29 |
+
"type": "object"
|
30 |
+
},
|
31 |
+
{
|
32 |
+
"additionalProperties": false,
|
33 |
+
"description": "Delete alias if exists",
|
34 |
+
"properties": {
|
35 |
+
"delete_alias": {
|
36 |
+
"properties": {
|
37 |
+
"alias_name": {
|
38 |
+
"type": "string"
|
39 |
+
}
|
40 |
+
},
|
41 |
+
"required": [
|
42 |
+
"alias_name"
|
43 |
+
],
|
44 |
+
"type": "object"
|
45 |
+
}
|
46 |
+
},
|
47 |
+
"required": [
|
48 |
+
"delete_alias"
|
49 |
+
],
|
50 |
+
"type": "object"
|
51 |
+
},
|
52 |
+
{
|
53 |
+
"additionalProperties": false,
|
54 |
+
"description": "Change alias to a new one",
|
55 |
+
"properties": {
|
56 |
+
"rename_alias": {
|
57 |
+
"properties": {
|
58 |
+
"new_alias_name": {
|
59 |
+
"type": "string"
|
60 |
+
},
|
61 |
+
"old_alias_name": {
|
62 |
+
"type": "string"
|
63 |
+
}
|
64 |
+
},
|
65 |
+
"required": [
|
66 |
+
"new_alias_name",
|
67 |
+
"old_alias_name"
|
68 |
+
],
|
69 |
+
"type": "object"
|
70 |
+
}
|
71 |
+
},
|
72 |
+
"required": [
|
73 |
+
"rename_alias"
|
74 |
+
],
|
75 |
+
"type": "object"
|
76 |
+
}
|
77 |
+
]
|
78 |
+
},
|
79 |
+
"CollectionConfig": {
|
80 |
+
"properties": {
|
81 |
+
"hnsw_config": {
|
82 |
+
"$ref": "#/components/schemas/HnswConfig"
|
83 |
+
},
|
84 |
+
"optimizer_config": {
|
85 |
+
"$ref": "#/components/schemas/OptimizersConfig"
|
86 |
+
},
|
87 |
+
"params": {
|
88 |
+
"$ref": "#/components/schemas/CollectionParams"
|
89 |
+
},
|
90 |
+
"wal_config": {
|
91 |
+
"$ref": "#/components/schemas/WalConfig"
|
92 |
+
}
|
93 |
+
},
|
94 |
+
"required": [
|
95 |
+
"hnsw_config",
|
96 |
+
"optimizer_config",
|
97 |
+
"params",
|
98 |
+
"wal_config"
|
99 |
+
],
|
100 |
+
"type": "object"
|
101 |
+
},
|
102 |
+
"CollectionDescription": {
|
103 |
+
"properties": {
|
104 |
+
"name": {
|
105 |
+
"type": "string"
|
106 |
+
}
|
107 |
+
},
|
108 |
+
"required": [
|
109 |
+
"name"
|
110 |
+
],
|
111 |
+
"type": "object"
|
112 |
+
},
|
113 |
+
"CollectionInfo": {
|
114 |
+
"description": "Current statistics and configuration of the collection.",
|
115 |
+
"properties": {
|
116 |
+
"config": {
|
117 |
+
"$ref": "#/components/schemas/CollectionConfig"
|
118 |
+
},
|
119 |
+
"disk_data_size": {
|
120 |
+
"description": "Disk space, used by collection",
|
121 |
+
"format": "uint",
|
122 |
+
"minimum": 0,
|
123 |
+
"type": "integer"
|
124 |
+
},
|
125 |
+
"payload_schema": {
|
126 |
+
"additionalProperties": {
|
127 |
+
"$ref": "#/components/schemas/PayloadSchemaInfo"
|
128 |
+
},
|
129 |
+
"description": "Types of stored payload",
|
130 |
+
"type": "object"
|
131 |
+
},
|
132 |
+
"ram_data_size": {
|
133 |
+
"description": "RAM used by collection",
|
134 |
+
"format": "uint",
|
135 |
+
"minimum": 0,
|
136 |
+
"type": "integer"
|
137 |
+
},
|
138 |
+
"segments_count": {
|
139 |
+
"description": "Number of segments in collection",
|
140 |
+
"format": "uint",
|
141 |
+
"minimum": 0,
|
142 |
+
"type": "integer"
|
143 |
+
},
|
144 |
+
"status": {
|
145 |
+
"$ref": "#/components/schemas/CollectionStatus"
|
146 |
+
},
|
147 |
+
"vectors_count": {
|
148 |
+
"description": "Number of vectors in collection",
|
149 |
+
"format": "uint",
|
150 |
+
"minimum": 0,
|
151 |
+
"type": "integer"
|
152 |
+
}
|
153 |
+
},
|
154 |
+
"required": [
|
155 |
+
"config",
|
156 |
+
"disk_data_size",
|
157 |
+
"payload_schema",
|
158 |
+
"ram_data_size",
|
159 |
+
"segments_count",
|
160 |
+
"status",
|
161 |
+
"vectors_count"
|
162 |
+
],
|
163 |
+
"type": "object"
|
164 |
+
},
|
165 |
+
"CollectionParams": {
|
166 |
+
"properties": {
|
167 |
+
"distance": {
|
168 |
+
"$ref": "#/components/schemas/Distance"
|
169 |
+
},
|
170 |
+
"vector_size": {
|
171 |
+
"description": "Size of a vectors used",
|
172 |
+
"format": "uint",
|
173 |
+
"minimum": 0,
|
174 |
+
"type": "integer"
|
175 |
+
}
|
176 |
+
},
|
177 |
+
"required": [
|
178 |
+
"distance",
|
179 |
+
"vector_size"
|
180 |
+
],
|
181 |
+
"type": "object"
|
182 |
+
},
|
183 |
+
"CollectionStatus": {
|
184 |
+
"enum": [
|
185 |
+
"green",
|
186 |
+
"yellow",
|
187 |
+
"red"
|
188 |
+
],
|
189 |
+
"type": "string"
|
190 |
+
},
|
191 |
+
"CollectionUpdateOperations": {
|
192 |
+
"anyOf": [
|
193 |
+
{
|
194 |
+
"$ref": "#/components/schemas/PointOperations"
|
195 |
+
},
|
196 |
+
{
|
197 |
+
"$ref": "#/components/schemas/PayloadOps"
|
198 |
+
},
|
199 |
+
{
|
200 |
+
"$ref": "#/components/schemas/FieldIndexOperations"
|
201 |
+
}
|
202 |
+
]
|
203 |
+
},
|
204 |
+
"CollectionsResponse": {
|
205 |
+
"properties": {
|
206 |
+
"collections": {
|
207 |
+
"items": {
|
208 |
+
"$ref": "#/components/schemas/CollectionDescription"
|
209 |
+
},
|
210 |
+
"type": "array"
|
211 |
+
}
|
212 |
+
},
|
213 |
+
"required": [
|
214 |
+
"collections"
|
215 |
+
],
|
216 |
+
"type": "object"
|
217 |
+
},
|
218 |
+
"Condition": {
|
219 |
+
"anyOf": [
|
220 |
+
{
|
221 |
+
"$ref": "#/components/schemas/FieldCondition"
|
222 |
+
},
|
223 |
+
{
|
224 |
+
"$ref": "#/components/schemas/HasIdCondition"
|
225 |
+
},
|
226 |
+
{
|
227 |
+
"$ref": "#/components/schemas/Filter"
|
228 |
+
}
|
229 |
+
]
|
230 |
+
},
|
231 |
+
"Distance": {
|
232 |
+
"description": "Type of internal tags, build from payload Distance function types used to compare vectors",
|
233 |
+
"enum": [
|
234 |
+
"Cosine",
|
235 |
+
"Euclid",
|
236 |
+
"Dot"
|
237 |
+
],
|
238 |
+
"type": "string"
|
239 |
+
},
|
240 |
+
"ErrorResponse": {
|
241 |
+
"properties": {
|
242 |
+
"result": {
|
243 |
+
"nullable": true,
|
244 |
+
"type": "object"
|
245 |
+
},
|
246 |
+
"status": {
|
247 |
+
"properties": {
|
248 |
+
"error": {
|
249 |
+
"description": "Description of the occurred error.",
|
250 |
+
"type": "string"
|
251 |
+
}
|
252 |
+
},
|
253 |
+
"type": "object"
|
254 |
+
},
|
255 |
+
"time": {
|
256 |
+
"description": "Time spent to process this request",
|
257 |
+
"format": "float",
|
258 |
+
"type": "number"
|
259 |
+
}
|
260 |
+
},
|
261 |
+
"type": "object"
|
262 |
+
},
|
263 |
+
"FieldCondition": {
|
264 |
+
"properties": {
|
265 |
+
"geo_bounding_box": {
|
266 |
+
"anyOf": [
|
267 |
+
{
|
268 |
+
"$ref": "#/components/schemas/GeoBoundingBox"
|
269 |
+
},
|
270 |
+
{
|
271 |
+
"nullable": true
|
272 |
+
}
|
273 |
+
],
|
274 |
+
"description": "Check if points geo location lies in a given area"
|
275 |
+
},
|
276 |
+
"geo_radius": {
|
277 |
+
"anyOf": [
|
278 |
+
{
|
279 |
+
"$ref": "#/components/schemas/GeoRadius"
|
280 |
+
},
|
281 |
+
{
|
282 |
+
"nullable": true
|
283 |
+
}
|
284 |
+
],
|
285 |
+
"description": "Check if geo point is within a given radius"
|
286 |
+
},
|
287 |
+
"key": {
|
288 |
+
"type": "string"
|
289 |
+
},
|
290 |
+
"match": {
|
291 |
+
"anyOf": [
|
292 |
+
{
|
293 |
+
"$ref": "#/components/schemas/Match"
|
294 |
+
},
|
295 |
+
{
|
296 |
+
"nullable": true
|
297 |
+
}
|
298 |
+
],
|
299 |
+
"description": "Check if point has field with a given value"
|
300 |
+
},
|
301 |
+
"range": {
|
302 |
+
"anyOf": [
|
303 |
+
{
|
304 |
+
"$ref": "#/components/schemas/Range"
|
305 |
+
},
|
306 |
+
{
|
307 |
+
"nullable": true
|
308 |
+
}
|
309 |
+
],
|
310 |
+
"description": "Check if points value lies in a given range"
|
311 |
+
}
|
312 |
+
},
|
313 |
+
"required": [
|
314 |
+
"key"
|
315 |
+
],
|
316 |
+
"type": "object"
|
317 |
+
},
|
318 |
+
"FieldIndexOperations": {
|
319 |
+
"anyOf": [
|
320 |
+
{
|
321 |
+
"additionalProperties": false,
|
322 |
+
"description": "Create index for payload field",
|
323 |
+
"properties": {
|
324 |
+
"create_index": {
|
325 |
+
"type": "string"
|
326 |
+
}
|
327 |
+
},
|
328 |
+
"required": [
|
329 |
+
"create_index"
|
330 |
+
],
|
331 |
+
"type": "object"
|
332 |
+
},
|
333 |
+
{
|
334 |
+
"additionalProperties": false,
|
335 |
+
"description": "Delete index for the field",
|
336 |
+
"properties": {
|
337 |
+
"delete_index": {
|
338 |
+
"type": "string"
|
339 |
+
}
|
340 |
+
},
|
341 |
+
"required": [
|
342 |
+
"delete_index"
|
343 |
+
],
|
344 |
+
"type": "object"
|
345 |
+
}
|
346 |
+
]
|
347 |
+
},
|
348 |
+
"Filter": {
|
349 |
+
"additionalProperties": false,
|
350 |
+
"properties": {
|
351 |
+
"must": {
|
352 |
+
"description": "All conditions must match",
|
353 |
+
"items": {
|
354 |
+
"$ref": "#/components/schemas/Condition"
|
355 |
+
},
|
356 |
+
"nullable": true,
|
357 |
+
"type": "array"
|
358 |
+
},
|
359 |
+
"must_not": {
|
360 |
+
"description": "All conditions must NOT match",
|
361 |
+
"items": {
|
362 |
+
"$ref": "#/components/schemas/Condition"
|
363 |
+
},
|
364 |
+
"nullable": true,
|
365 |
+
"type": "array"
|
366 |
+
},
|
367 |
+
"should": {
|
368 |
+
"description": "At least one of thous conditions should match",
|
369 |
+
"items": {
|
370 |
+
"$ref": "#/components/schemas/Condition"
|
371 |
+
},
|
372 |
+
"nullable": true,
|
373 |
+
"type": "array"
|
374 |
+
}
|
375 |
+
},
|
376 |
+
"type": "object"
|
377 |
+
},
|
378 |
+
"GeoBoundingBox": {
|
379 |
+
"properties": {
|
380 |
+
"bottom_right": {
|
381 |
+
"$ref": "#/components/schemas/GeoPoint"
|
382 |
+
},
|
383 |
+
"top_left": {
|
384 |
+
"$ref": "#/components/schemas/GeoPoint"
|
385 |
+
}
|
386 |
+
},
|
387 |
+
"required": [
|
388 |
+
"bottom_right",
|
389 |
+
"top_left"
|
390 |
+
],
|
391 |
+
"type": "object"
|
392 |
+
},
|
393 |
+
"GeoPoint": {
|
394 |
+
"properties": {
|
395 |
+
"lat": {
|
396 |
+
"format": "double",
|
397 |
+
"type": "number"
|
398 |
+
},
|
399 |
+
"lon": {
|
400 |
+
"format": "double",
|
401 |
+
"type": "number"
|
402 |
+
}
|
403 |
+
},
|
404 |
+
"required": [
|
405 |
+
"lat",
|
406 |
+
"lon"
|
407 |
+
],
|
408 |
+
"type": "object"
|
409 |
+
},
|
410 |
+
"GeoRadius": {
|
411 |
+
"properties": {
|
412 |
+
"center": {
|
413 |
+
"$ref": "#/components/schemas/GeoPoint"
|
414 |
+
},
|
415 |
+
"radius": {
|
416 |
+
"description": "Radius of the area in meters",
|
417 |
+
"format": "double",
|
418 |
+
"type": "number"
|
419 |
+
}
|
420 |
+
},
|
421 |
+
"required": [
|
422 |
+
"center",
|
423 |
+
"radius"
|
424 |
+
],
|
425 |
+
"type": "object"
|
426 |
+
},
|
427 |
+
"HasIdCondition": {
|
428 |
+
"properties": {
|
429 |
+
"has_id": {
|
430 |
+
"items": {
|
431 |
+
"format": "uint64",
|
432 |
+
"minimum": 0,
|
433 |
+
"type": "integer"
|
434 |
+
},
|
435 |
+
"type": "array",
|
436 |
+
"uniqueItems": true
|
437 |
+
}
|
438 |
+
},
|
439 |
+
"required": [
|
440 |
+
"has_id"
|
441 |
+
],
|
442 |
+
"type": "object"
|
443 |
+
},
|
444 |
+
"HnswConfig": {
|
445 |
+
"properties": {
|
446 |
+
"ef_construct": {
|
447 |
+
"description": "Number of neighbours to consider during the index building. Larger the value - more accurate the search, more time required to build index.",
|
448 |
+
"format": "uint",
|
449 |
+
"minimum": 0,
|
450 |
+
"type": "integer"
|
451 |
+
},
|
452 |
+
"full_scan_threshold": {
|
453 |
+
"description": "Minimal amount of points for additional payload-based indexing. If payload chunk is smaller than `full_scan_threshold` additional indexing won't be used - in this case full-scan search should be preferred by query planner and additional indexing is not required.",
|
454 |
+
"format": "uint",
|
455 |
+
"minimum": 0,
|
456 |
+
"type": "integer"
|
457 |
+
},
|
458 |
+
"m": {
|
459 |
+
"description": "Number of edges per node in the index graph. Larger the value - more accurate the search, more space required.",
|
460 |
+
"format": "uint",
|
461 |
+
"minimum": 0,
|
462 |
+
"type": "integer"
|
463 |
+
}
|
464 |
+
},
|
465 |
+
"required": [
|
466 |
+
"ef_construct",
|
467 |
+
"full_scan_threshold",
|
468 |
+
"m"
|
469 |
+
],
|
470 |
+
"type": "object"
|
471 |
+
},
|
472 |
+
"HnswConfigDiff": {
|
473 |
+
"properties": {
|
474 |
+
"ef_construct": {
|
475 |
+
"description": "Number of neighbours to consider during the index building. Larger the value - more accurate the search, more time required to build index.",
|
476 |
+
"format": "uint",
|
477 |
+
"minimum": 0,
|
478 |
+
"nullable": true,
|
479 |
+
"type": "integer"
|
480 |
+
},
|
481 |
+
"full_scan_threshold": {
|
482 |
+
"description": "Minimal amount of points for additional payload-based indexing. If payload chunk is smaller than `full_scan_threshold` additional indexing won't be used - in this case full-scan search should be preferred by query planner and additional indexing is not required.",
|
483 |
+
"format": "uint",
|
484 |
+
"minimum": 0,
|
485 |
+
"nullable": true,
|
486 |
+
"type": "integer"
|
487 |
+
},
|
488 |
+
"m": {
|
489 |
+
"description": "Number of edges per node in the index graph. Larger the value - more accurate the search, more space required.",
|
490 |
+
"format": "uint",
|
491 |
+
"minimum": 0,
|
492 |
+
"nullable": true,
|
493 |
+
"type": "integer"
|
494 |
+
}
|
495 |
+
},
|
496 |
+
"type": "object"
|
497 |
+
},
|
498 |
+
"Match": {
|
499 |
+
"properties": {
|
500 |
+
"integer": {
|
501 |
+
"description": "Integer value to match",
|
502 |
+
"format": "int64",
|
503 |
+
"nullable": true,
|
504 |
+
"type": "integer"
|
505 |
+
},
|
506 |
+
"keyword": {
|
507 |
+
"description": "Keyword value to match",
|
508 |
+
"nullable": true,
|
509 |
+
"type": "string"
|
510 |
+
}
|
511 |
+
},
|
512 |
+
"type": "object"
|
513 |
+
},
|
514 |
+
"OptimizersConfig": {
|
515 |
+
"properties": {
|
516 |
+
"deleted_threshold": {
|
517 |
+
"description": "The minimal fraction of deleted vectors in a segment, required to perform segment optimization",
|
518 |
+
"format": "double",
|
519 |
+
"type": "number"
|
520 |
+
},
|
521 |
+
"flush_interval_sec": {
|
522 |
+
"description": "Minimum interval between forced flushes.",
|
523 |
+
"format": "uint64",
|
524 |
+
"minimum": 0,
|
525 |
+
"type": "integer"
|
526 |
+
},
|
527 |
+
"indexing_threshold": {
|
528 |
+
"description": "Maximum number of vectors allowed for plain index. Default value based on https://github.com/google-research/google-research/blob/master/scann/docs/algorithms.md",
|
529 |
+
"format": "uint",
|
530 |
+
"minimum": 0,
|
531 |
+
"type": "integer"
|
532 |
+
},
|
533 |
+
"max_segment_number": {
|
534 |
+
"description": "If the number of segments exceeds this value, the optimizer will merge the smallest segments.",
|
535 |
+
"format": "uint",
|
536 |
+
"minimum": 0,
|
537 |
+
"type": "integer"
|
538 |
+
},
|
539 |
+
"memmap_threshold": {
|
540 |
+
"description": "Maximum number of vectors to store in-memory per segment. Segments larger than this threshold will be stored as read-only memmaped file.",
|
541 |
+
"format": "uint",
|
542 |
+
"minimum": 0,
|
543 |
+
"type": "integer"
|
544 |
+
},
|
545 |
+
"payload_indexing_threshold": {
|
546 |
+
"description": "Starting from this amount of vectors per-segment the engine will start building index for payload.",
|
547 |
+
"format": "uint",
|
548 |
+
"minimum": 0,
|
549 |
+
"type": "integer"
|
550 |
+
},
|
551 |
+
"vacuum_min_vector_number": {
|
552 |
+
"description": "The minimal number of vectors in a segment, required to perform segment optimization",
|
553 |
+
"format": "uint",
|
554 |
+
"minimum": 0,
|
555 |
+
"type": "integer"
|
556 |
+
}
|
557 |
+
},
|
558 |
+
"required": [
|
559 |
+
"deleted_threshold",
|
560 |
+
"flush_interval_sec",
|
561 |
+
"indexing_threshold",
|
562 |
+
"max_segment_number",
|
563 |
+
"memmap_threshold",
|
564 |
+
"payload_indexing_threshold",
|
565 |
+
"vacuum_min_vector_number"
|
566 |
+
],
|
567 |
+
"type": "object"
|
568 |
+
},
|
569 |
+
"OptimizersConfigDiff": {
|
570 |
+
"properties": {
|
571 |
+
"deleted_threshold": {
|
572 |
+
"description": "The minimal fraction of deleted vectors in a segment, required to perform segment optimization",
|
573 |
+
"format": "double",
|
574 |
+
"nullable": true,
|
575 |
+
"type": "number"
|
576 |
+
},
|
577 |
+
"flush_interval_sec": {
|
578 |
+
"description": "Minimum interval between forced flushes.",
|
579 |
+
"format": "uint64",
|
580 |
+
"minimum": 0,
|
581 |
+
"nullable": true,
|
582 |
+
"type": "integer"
|
583 |
+
},
|
584 |
+
"indexing_threshold": {
|
585 |
+
"description": "Maximum number of vectors allowed for plain index. Default value based on https://github.com/google-research/google-research/blob/master/scann/docs/algorithms.md",
|
586 |
+
"format": "uint",
|
587 |
+
"minimum": 0,
|
588 |
+
"nullable": true,
|
589 |
+
"type": "integer"
|
590 |
+
},
|
591 |
+
"max_segment_number": {
|
592 |
+
"description": "If the number of segments exceeds this value, the optimizer will merge the smallest segments.",
|
593 |
+
"format": "uint",
|
594 |
+
"minimum": 0,
|
595 |
+
"nullable": true,
|
596 |
+
"type": "integer"
|
597 |
+
},
|
598 |
+
"memmap_threshold": {
|
599 |
+
"description": "Maximum number of vectors to store in-memory per segment. Segments larger than this threshold will be stored as read-only memmaped file.",
|
600 |
+
"format": "uint",
|
601 |
+
"minimum": 0,
|
602 |
+
"nullable": true,
|
603 |
+
"type": "integer"
|
604 |
+
},
|
605 |
+
"payload_indexing_threshold": {
|
606 |
+
"description": "Starting from this amount of vectors per-segment the engine will start building index for payload.",
|
607 |
+
"format": "uint",
|
608 |
+
"minimum": 0,
|
609 |
+
"nullable": true,
|
610 |
+
"type": "integer"
|
611 |
+
},
|
612 |
+
"vacuum_min_vector_number": {
|
613 |
+
"description": "The minimal number of vectors in a segment, required to perform segment optimization",
|
614 |
+
"format": "uint",
|
615 |
+
"minimum": 0,
|
616 |
+
"nullable": true,
|
617 |
+
"type": "integer"
|
618 |
+
}
|
619 |
+
},
|
620 |
+
"type": "object"
|
621 |
+
},
|
622 |
+
"PayloadInterface": {
|
623 |
+
"anyOf": [
|
624 |
+
{
|
625 |
+
"$ref": "#/components/schemas/PayloadVariant_for_String"
|
626 |
+
},
|
627 |
+
{
|
628 |
+
"$ref": "#/components/schemas/PayloadVariant_for_int64"
|
629 |
+
},
|
630 |
+
{
|
631 |
+
"$ref": "#/components/schemas/PayloadVariant_for_double"
|
632 |
+
},
|
633 |
+
{
|
634 |
+
"$ref": "#/components/schemas/PayloadInterfaceStrict"
|
635 |
+
}
|
636 |
+
]
|
637 |
+
},
|
638 |
+
"PayloadInterfaceStrict": {
|
639 |
+
"anyOf": [
|
640 |
+
{
|
641 |
+
"properties": {
|
642 |
+
"type": {
|
643 |
+
"enum": [
|
644 |
+
"keyword"
|
645 |
+
],
|
646 |
+
"type": "string"
|
647 |
+
},
|
648 |
+
"value": {
|
649 |
+
"$ref": "#/components/schemas/PayloadVariant_for_String"
|
650 |
+
}
|
651 |
+
},
|
652 |
+
"required": [
|
653 |
+
"type",
|
654 |
+
"value"
|
655 |
+
],
|
656 |
+
"type": "object"
|
657 |
+
},
|
658 |
+
{
|
659 |
+
"properties": {
|
660 |
+
"type": {
|
661 |
+
"enum": [
|
662 |
+
"integer"
|
663 |
+
],
|
664 |
+
"type": "string"
|
665 |
+
},
|
666 |
+
"value": {
|
667 |
+
"$ref": "#/components/schemas/PayloadVariant_for_int64"
|
668 |
+
}
|
669 |
+
},
|
670 |
+
"required": [
|
671 |
+
"type",
|
672 |
+
"value"
|
673 |
+
],
|
674 |
+
"type": "object"
|
675 |
+
},
|
676 |
+
{
|
677 |
+
"properties": {
|
678 |
+
"type": {
|
679 |
+
"enum": [
|
680 |
+
"float"
|
681 |
+
],
|
682 |
+
"type": "string"
|
683 |
+
},
|
684 |
+
"value": {
|
685 |
+
"$ref": "#/components/schemas/PayloadVariant_for_double"
|
686 |
+
}
|
687 |
+
},
|
688 |
+
"required": [
|
689 |
+
"type",
|
690 |
+
"value"
|
691 |
+
],
|
692 |
+
"type": "object"
|
693 |
+
},
|
694 |
+
{
|
695 |
+
"properties": {
|
696 |
+
"type": {
|
697 |
+
"enum": [
|
698 |
+
"geo"
|
699 |
+
],
|
700 |
+
"type": "string"
|
701 |
+
},
|
702 |
+
"value": {
|
703 |
+
"$ref": "#/components/schemas/PayloadVariant_for_GeoPoint"
|
704 |
+
}
|
705 |
+
},
|
706 |
+
"required": [
|
707 |
+
"type",
|
708 |
+
"value"
|
709 |
+
],
|
710 |
+
"type": "object"
|
711 |
+
}
|
712 |
+
]
|
713 |
+
},
|
714 |
+
"PayloadOps": {
|
715 |
+
"anyOf": [
|
716 |
+
{
|
717 |
+
"additionalProperties": false,
|
718 |
+
"description": "Set payload value, overrides if it is already exists",
|
719 |
+
"properties": {
|
720 |
+
"set_payload": {
|
721 |
+
"properties": {
|
722 |
+
"payload": {
|
723 |
+
"additionalProperties": {
|
724 |
+
"$ref": "#/components/schemas/PayloadInterface"
|
725 |
+
},
|
726 |
+
"type": "object"
|
727 |
+
},
|
728 |
+
"points": {
|
729 |
+
"description": "Assigns payload to each point in this list",
|
730 |
+
"items": {
|
731 |
+
"format": "uint64",
|
732 |
+
"minimum": 0,
|
733 |
+
"type": "integer"
|
734 |
+
},
|
735 |
+
"type": "array"
|
736 |
+
}
|
737 |
+
},
|
738 |
+
"required": [
|
739 |
+
"payload",
|
740 |
+
"points"
|
741 |
+
],
|
742 |
+
"type": "object"
|
743 |
+
}
|
744 |
+
},
|
745 |
+
"required": [
|
746 |
+
"set_payload"
|
747 |
+
],
|
748 |
+
"type": "object"
|
749 |
+
},
|
750 |
+
{
|
751 |
+
"additionalProperties": false,
|
752 |
+
"description": "Deletes specified payload values if they are assigned",
|
753 |
+
"properties": {
|
754 |
+
"delete_payload": {
|
755 |
+
"properties": {
|
756 |
+
"keys": {
|
757 |
+
"items": {
|
758 |
+
"type": "string"
|
759 |
+
},
|
760 |
+
"type": "array"
|
761 |
+
},
|
762 |
+
"points": {
|
763 |
+
"description": "Deletes values from each point in this list",
|
764 |
+
"items": {
|
765 |
+
"format": "uint64",
|
766 |
+
"minimum": 0,
|
767 |
+
"type": "integer"
|
768 |
+
},
|
769 |
+
"type": "array"
|
770 |
+
}
|
771 |
+
},
|
772 |
+
"required": [
|
773 |
+
"keys",
|
774 |
+
"points"
|
775 |
+
],
|
776 |
+
"type": "object"
|
777 |
+
}
|
778 |
+
},
|
779 |
+
"required": [
|
780 |
+
"delete_payload"
|
781 |
+
],
|
782 |
+
"type": "object"
|
783 |
+
},
|
784 |
+
{
|
785 |
+
"additionalProperties": false,
|
786 |
+
"description": "Drops all Payload values associated with given points.",
|
787 |
+
"properties": {
|
788 |
+
"clear_payload": {
|
789 |
+
"properties": {
|
790 |
+
"points": {
|
791 |
+
"items": {
|
792 |
+
"format": "uint64",
|
793 |
+
"minimum": 0,
|
794 |
+
"type": "integer"
|
795 |
+
},
|
796 |
+
"type": "array"
|
797 |
+
}
|
798 |
+
},
|
799 |
+
"required": [
|
800 |
+
"points"
|
801 |
+
],
|
802 |
+
"type": "object"
|
803 |
+
}
|
804 |
+
},
|
805 |
+
"required": [
|
806 |
+
"clear_payload"
|
807 |
+
],
|
808 |
+
"type": "object"
|
809 |
+
}
|
810 |
+
],
|
811 |
+
"description": "Define operations description for point payloads manipulation"
|
812 |
+
},
|
813 |
+
"PayloadSchemaInfo": {
|
814 |
+
"properties": {
|
815 |
+
"data_type": {
|
816 |
+
"$ref": "#/components/schemas/PayloadSchemaType"
|
817 |
+
},
|
818 |
+
"indexed": {
|
819 |
+
"type": "boolean"
|
820 |
+
}
|
821 |
+
},
|
822 |
+
"required": [
|
823 |
+
"data_type",
|
824 |
+
"indexed"
|
825 |
+
],
|
826 |
+
"type": "object"
|
827 |
+
},
|
828 |
+
"PayloadSchemaType": {
|
829 |
+
"anyOf": [
|
830 |
+
{
|
831 |
+
"properties": {
|
832 |
+
"type": {
|
833 |
+
"enum": [
|
834 |
+
"keyword"
|
835 |
+
],
|
836 |
+
"type": "string"
|
837 |
+
}
|
838 |
+
},
|
839 |
+
"required": [
|
840 |
+
"type"
|
841 |
+
],
|
842 |
+
"type": "object"
|
843 |
+
},
|
844 |
+
{
|
845 |
+
"properties": {
|
846 |
+
"type": {
|
847 |
+
"enum": [
|
848 |
+
"integer"
|
849 |
+
],
|
850 |
+
"type": "string"
|
851 |
+
}
|
852 |
+
},
|
853 |
+
"required": [
|
854 |
+
"type"
|
855 |
+
],
|
856 |
+
"type": "object"
|
857 |
+
},
|
858 |
+
{
|
859 |
+
"properties": {
|
860 |
+
"type": {
|
861 |
+
"enum": [
|
862 |
+
"float"
|
863 |
+
],
|
864 |
+
"type": "string"
|
865 |
+
}
|
866 |
+
},
|
867 |
+
"required": [
|
868 |
+
"type"
|
869 |
+
],
|
870 |
+
"type": "object"
|
871 |
+
},
|
872 |
+
{
|
873 |
+
"properties": {
|
874 |
+
"type": {
|
875 |
+
"enum": [
|
876 |
+
"geo"
|
877 |
+
],
|
878 |
+
"type": "string"
|
879 |
+
}
|
880 |
+
},
|
881 |
+
"required": [
|
882 |
+
"type"
|
883 |
+
],
|
884 |
+
"type": "object"
|
885 |
+
}
|
886 |
+
]
|
887 |
+
},
|
888 |
+
"PayloadSelector": {
|
889 |
+
"additionalProperties": false,
|
890 |
+
"properties": {
|
891 |
+
"exclude": {
|
892 |
+
"description": "Post-exclude return payload key type",
|
893 |
+
"items": {
|
894 |
+
"type": "string"
|
895 |
+
},
|
896 |
+
"type": "array"
|
897 |
+
},
|
898 |
+
"include": {
|
899 |
+
"description": "Include return payload key type",
|
900 |
+
"items": {
|
901 |
+
"type": "string"
|
902 |
+
},
|
903 |
+
"type": "array"
|
904 |
+
}
|
905 |
+
},
|
906 |
+
"required": [
|
907 |
+
"exclude",
|
908 |
+
"include"
|
909 |
+
],
|
910 |
+
"type": "object"
|
911 |
+
},
|
912 |
+
"PayloadType": {
|
913 |
+
"anyOf": [
|
914 |
+
{
|
915 |
+
"properties": {
|
916 |
+
"type": {
|
917 |
+
"enum": [
|
918 |
+
"keyword"
|
919 |
+
],
|
920 |
+
"type": "string"
|
921 |
+
},
|
922 |
+
"value": {
|
923 |
+
"items": {
|
924 |
+
"type": "string"
|
925 |
+
},
|
926 |
+
"type": "array"
|
927 |
+
}
|
928 |
+
},
|
929 |
+
"required": [
|
930 |
+
"type",
|
931 |
+
"value"
|
932 |
+
],
|
933 |
+
"type": "object"
|
934 |
+
},
|
935 |
+
{
|
936 |
+
"properties": {
|
937 |
+
"type": {
|
938 |
+
"enum": [
|
939 |
+
"integer"
|
940 |
+
],
|
941 |
+
"type": "string"
|
942 |
+
},
|
943 |
+
"value": {
|
944 |
+
"items": {
|
945 |
+
"format": "int64",
|
946 |
+
"type": "integer"
|
947 |
+
},
|
948 |
+
"type": "array"
|
949 |
+
}
|
950 |
+
},
|
951 |
+
"required": [
|
952 |
+
"type",
|
953 |
+
"value"
|
954 |
+
],
|
955 |
+
"type": "object"
|
956 |
+
},
|
957 |
+
{
|
958 |
+
"properties": {
|
959 |
+
"type": {
|
960 |
+
"enum": [
|
961 |
+
"float"
|
962 |
+
],
|
963 |
+
"type": "string"
|
964 |
+
},
|
965 |
+
"value": {
|
966 |
+
"items": {
|
967 |
+
"format": "double",
|
968 |
+
"type": "number"
|
969 |
+
},
|
970 |
+
"type": "array"
|
971 |
+
}
|
972 |
+
},
|
973 |
+
"required": [
|
974 |
+
"type",
|
975 |
+
"value"
|
976 |
+
],
|
977 |
+
"type": "object"
|
978 |
+
},
|
979 |
+
{
|
980 |
+
"properties": {
|
981 |
+
"type": {
|
982 |
+
"enum": [
|
983 |
+
"geo"
|
984 |
+
],
|
985 |
+
"type": "string"
|
986 |
+
},
|
987 |
+
"value": {
|
988 |
+
"items": {
|
989 |
+
"$ref": "#/components/schemas/GeoPoint"
|
990 |
+
},
|
991 |
+
"type": "array"
|
992 |
+
}
|
993 |
+
},
|
994 |
+
"required": [
|
995 |
+
"type",
|
996 |
+
"value"
|
997 |
+
],
|
998 |
+
"type": "object"
|
999 |
+
}
|
1000 |
+
]
|
1001 |
+
},
|
1002 |
+
"PayloadVariant_for_GeoPoint": {
|
1003 |
+
"anyOf": [
|
1004 |
+
{
|
1005 |
+
"items": {
|
1006 |
+
"$ref": "#/components/schemas/GeoPoint"
|
1007 |
+
},
|
1008 |
+
"type": "array"
|
1009 |
+
},
|
1010 |
+
{
|
1011 |
+
"$ref": "#/components/schemas/GeoPoint"
|
1012 |
+
}
|
1013 |
+
]
|
1014 |
+
},
|
1015 |
+
"PayloadVariant_for_String": {
|
1016 |
+
"anyOf": [
|
1017 |
+
{
|
1018 |
+
"items": {
|
1019 |
+
"type": "string"
|
1020 |
+
},
|
1021 |
+
"type": "array"
|
1022 |
+
},
|
1023 |
+
{
|
1024 |
+
"type": "string"
|
1025 |
+
}
|
1026 |
+
]
|
1027 |
+
},
|
1028 |
+
"PayloadVariant_for_double": {
|
1029 |
+
"anyOf": [
|
1030 |
+
{
|
1031 |
+
"items": {
|
1032 |
+
"format": "double",
|
1033 |
+
"type": "number"
|
1034 |
+
},
|
1035 |
+
"type": "array"
|
1036 |
+
},
|
1037 |
+
{
|
1038 |
+
"format": "double",
|
1039 |
+
"type": "number"
|
1040 |
+
}
|
1041 |
+
]
|
1042 |
+
},
|
1043 |
+
"PayloadVariant_for_int64": {
|
1044 |
+
"anyOf": [
|
1045 |
+
{
|
1046 |
+
"items": {
|
1047 |
+
"format": "int64",
|
1048 |
+
"type": "integer"
|
1049 |
+
},
|
1050 |
+
"type": "array"
|
1051 |
+
},
|
1052 |
+
{
|
1053 |
+
"format": "int64",
|
1054 |
+
"type": "integer"
|
1055 |
+
}
|
1056 |
+
]
|
1057 |
+
},
|
1058 |
+
"PointInsertOperations": {
|
1059 |
+
"anyOf": [
|
1060 |
+
{
|
1061 |
+
"additionalProperties": false,
|
1062 |
+
"description": "Inset points from a batch.",
|
1063 |
+
"properties": {
|
1064 |
+
"batch": {
|
1065 |
+
"properties": {
|
1066 |
+
"ids": {
|
1067 |
+
"items": {
|
1068 |
+
"format": "uint64",
|
1069 |
+
"minimum": 0,
|
1070 |
+
"type": "integer"
|
1071 |
+
},
|
1072 |
+
"type": "array"
|
1073 |
+
},
|
1074 |
+
"payloads": {
|
1075 |
+
"items": {
|
1076 |
+
"additionalProperties": {
|
1077 |
+
"$ref": "#/components/schemas/PayloadInterface"
|
1078 |
+
},
|
1079 |
+
"nullable": true,
|
1080 |
+
"type": "object"
|
1081 |
+
},
|
1082 |
+
"nullable": true,
|
1083 |
+
"type": "array"
|
1084 |
+
},
|
1085 |
+
"vectors": {
|
1086 |
+
"items": {
|
1087 |
+
"items": {
|
1088 |
+
"format": "float",
|
1089 |
+
"type": "number"
|
1090 |
+
},
|
1091 |
+
"type": "array"
|
1092 |
+
},
|
1093 |
+
"type": "array"
|
1094 |
+
}
|
1095 |
+
},
|
1096 |
+
"required": [
|
1097 |
+
"ids",
|
1098 |
+
"vectors"
|
1099 |
+
],
|
1100 |
+
"type": "object"
|
1101 |
+
}
|
1102 |
+
},
|
1103 |
+
"required": [
|
1104 |
+
"batch"
|
1105 |
+
],
|
1106 |
+
"type": "object"
|
1107 |
+
},
|
1108 |
+
{
|
1109 |
+
"additionalProperties": false,
|
1110 |
+
"description": "Insert points from a list",
|
1111 |
+
"properties": {
|
1112 |
+
"points": {
|
1113 |
+
"items": {
|
1114 |
+
"$ref": "#/components/schemas/PointStruct"
|
1115 |
+
},
|
1116 |
+
"type": "array"
|
1117 |
+
}
|
1118 |
+
},
|
1119 |
+
"required": [
|
1120 |
+
"points"
|
1121 |
+
],
|
1122 |
+
"type": "object"
|
1123 |
+
}
|
1124 |
+
]
|
1125 |
+
},
|
1126 |
+
"PointOperations": {
|
1127 |
+
"anyOf": [
|
1128 |
+
{
|
1129 |
+
"additionalProperties": false,
|
1130 |
+
"description": "Insert or update points",
|
1131 |
+
"properties": {
|
1132 |
+
"upsert_points": {
|
1133 |
+
"$ref": "#/components/schemas/PointInsertOperations"
|
1134 |
+
}
|
1135 |
+
},
|
1136 |
+
"required": [
|
1137 |
+
"upsert_points"
|
1138 |
+
],
|
1139 |
+
"type": "object"
|
1140 |
+
},
|
1141 |
+
{
|
1142 |
+
"additionalProperties": false,
|
1143 |
+
"description": "Delete point if exists",
|
1144 |
+
"properties": {
|
1145 |
+
"delete_points": {
|
1146 |
+
"properties": {
|
1147 |
+
"ids": {
|
1148 |
+
"items": {
|
1149 |
+
"format": "uint64",
|
1150 |
+
"minimum": 0,
|
1151 |
+
"type": "integer"
|
1152 |
+
},
|
1153 |
+
"type": "array"
|
1154 |
+
}
|
1155 |
+
},
|
1156 |
+
"required": [
|
1157 |
+
"ids"
|
1158 |
+
],
|
1159 |
+
"type": "object"
|
1160 |
+
}
|
1161 |
+
},
|
1162 |
+
"required": [
|
1163 |
+
"delete_points"
|
1164 |
+
],
|
1165 |
+
"type": "object"
|
1166 |
+
}
|
1167 |
+
]
|
1168 |
+
},
|
1169 |
+
"PointRequest": {
|
1170 |
+
"properties": {
|
1171 |
+
"ids": {
|
1172 |
+
"items": {
|
1173 |
+
"format": "uint64",
|
1174 |
+
"minimum": 0,
|
1175 |
+
"type": "integer"
|
1176 |
+
},
|
1177 |
+
"type": "array"
|
1178 |
+
},
|
1179 |
+
"with_payload": {
|
1180 |
+
"anyOf": [
|
1181 |
+
{
|
1182 |
+
"$ref": "#/components/schemas/WithPayloadInterface"
|
1183 |
+
},
|
1184 |
+
{
|
1185 |
+
"nullable": true
|
1186 |
+
}
|
1187 |
+
]
|
1188 |
+
}
|
1189 |
+
},
|
1190 |
+
"required": [
|
1191 |
+
"ids"
|
1192 |
+
],
|
1193 |
+
"type": "object"
|
1194 |
+
},
|
1195 |
+
"PointStruct": {
|
1196 |
+
"properties": {
|
1197 |
+
"id": {
|
1198 |
+
"description": "Point id",
|
1199 |
+
"format": "uint64",
|
1200 |
+
"minimum": 0,
|
1201 |
+
"type": "integer"
|
1202 |
+
},
|
1203 |
+
"payload": {
|
1204 |
+
"additionalProperties": {
|
1205 |
+
"$ref": "#/components/schemas/PayloadInterface"
|
1206 |
+
},
|
1207 |
+
"description": "Payload values (optional)",
|
1208 |
+
"nullable": true,
|
1209 |
+
"type": "object"
|
1210 |
+
},
|
1211 |
+
"vector": {
|
1212 |
+
"description": "Vector",
|
1213 |
+
"items": {
|
1214 |
+
"format": "float",
|
1215 |
+
"type": "number"
|
1216 |
+
},
|
1217 |
+
"type": "array"
|
1218 |
+
}
|
1219 |
+
},
|
1220 |
+
"required": [
|
1221 |
+
"id",
|
1222 |
+
"vector"
|
1223 |
+
],
|
1224 |
+
"type": "object"
|
1225 |
+
},
|
1226 |
+
"Range": {
|
1227 |
+
"properties": {
|
1228 |
+
"gt": {
|
1229 |
+
"description": "point.key > range.gt",
|
1230 |
+
"format": "double",
|
1231 |
+
"nullable": true,
|
1232 |
+
"type": "number"
|
1233 |
+
},
|
1234 |
+
"gte": {
|
1235 |
+
"description": "point.key >= range.gte",
|
1236 |
+
"format": "double",
|
1237 |
+
"nullable": true,
|
1238 |
+
"type": "number"
|
1239 |
+
},
|
1240 |
+
"lt": {
|
1241 |
+
"description": "point.key < range.lt",
|
1242 |
+
"format": "double",
|
1243 |
+
"nullable": true,
|
1244 |
+
"type": "number"
|
1245 |
+
},
|
1246 |
+
"lte": {
|
1247 |
+
"description": "point.key <= range.lte",
|
1248 |
+
"format": "double",
|
1249 |
+
"nullable": true,
|
1250 |
+
"type": "number"
|
1251 |
+
}
|
1252 |
+
},
|
1253 |
+
"type": "object"
|
1254 |
+
},
|
1255 |
+
"RecommendRequest": {
|
1256 |
+
"description": "Search request",
|
1257 |
+
"properties": {
|
1258 |
+
"filter": {
|
1259 |
+
"anyOf": [
|
1260 |
+
{
|
1261 |
+
"$ref": "#/components/schemas/Filter"
|
1262 |
+
},
|
1263 |
+
{
|
1264 |
+
"nullable": true
|
1265 |
+
}
|
1266 |
+
],
|
1267 |
+
"description": "Look only for points which satisfies this conditions"
|
1268 |
+
},
|
1269 |
+
"negative": {
|
1270 |
+
"description": "Try to avoid vectors like this",
|
1271 |
+
"items": {
|
1272 |
+
"format": "uint64",
|
1273 |
+
"minimum": 0,
|
1274 |
+
"type": "integer"
|
1275 |
+
},
|
1276 |
+
"type": "array"
|
1277 |
+
},
|
1278 |
+
"params": {
|
1279 |
+
"anyOf": [
|
1280 |
+
{
|
1281 |
+
"$ref": "#/components/schemas/SearchParams"
|
1282 |
+
},
|
1283 |
+
{
|
1284 |
+
"nullable": true
|
1285 |
+
}
|
1286 |
+
],
|
1287 |
+
"description": "Additional search params"
|
1288 |
+
},
|
1289 |
+
"positive": {
|
1290 |
+
"description": "Look for vectors closest to those",
|
1291 |
+
"items": {
|
1292 |
+
"format": "uint64",
|
1293 |
+
"minimum": 0,
|
1294 |
+
"type": "integer"
|
1295 |
+
},
|
1296 |
+
"type": "array"
|
1297 |
+
},
|
1298 |
+
"top": {
|
1299 |
+
"description": "Max number of result to return",
|
1300 |
+
"format": "uint",
|
1301 |
+
"minimum": 0,
|
1302 |
+
"type": "integer"
|
1303 |
+
}
|
1304 |
+
},
|
1305 |
+
"required": [
|
1306 |
+
"negative",
|
1307 |
+
"positive",
|
1308 |
+
"top"
|
1309 |
+
],
|
1310 |
+
"type": "object"
|
1311 |
+
},
|
1312 |
+
"Record": {
|
1313 |
+
"description": "Point data",
|
1314 |
+
"properties": {
|
1315 |
+
"id": {
|
1316 |
+
"description": "Id of the point",
|
1317 |
+
"format": "uint64",
|
1318 |
+
"minimum": 0,
|
1319 |
+
"type": "integer"
|
1320 |
+
},
|
1321 |
+
"payload": {
|
1322 |
+
"additionalProperties": {
|
1323 |
+
"$ref": "#/components/schemas/PayloadType"
|
1324 |
+
},
|
1325 |
+
"description": "Payload - values assigned to the point",
|
1326 |
+
"nullable": true,
|
1327 |
+
"type": "object"
|
1328 |
+
},
|
1329 |
+
"vector": {
|
1330 |
+
"description": "Vector of the point",
|
1331 |
+
"items": {
|
1332 |
+
"format": "float",
|
1333 |
+
"type": "number"
|
1334 |
+
},
|
1335 |
+
"nullable": true,
|
1336 |
+
"type": "array"
|
1337 |
+
}
|
1338 |
+
},
|
1339 |
+
"required": [
|
1340 |
+
"id"
|
1341 |
+
],
|
1342 |
+
"type": "object"
|
1343 |
+
},
|
1344 |
+
"ScoredPoint": {
|
1345 |
+
"properties": {
|
1346 |
+
"id": {
|
1347 |
+
"description": "Point id",
|
1348 |
+
"format": "uint64",
|
1349 |
+
"minimum": 0,
|
1350 |
+
"type": "integer"
|
1351 |
+
},
|
1352 |
+
"payload": {
|
1353 |
+
"additionalProperties": {
|
1354 |
+
"$ref": "#/components/schemas/PayloadType"
|
1355 |
+
},
|
1356 |
+
"description": "Payload storage",
|
1357 |
+
"nullable": true,
|
1358 |
+
"type": "object"
|
1359 |
+
},
|
1360 |
+
"score": {
|
1361 |
+
"description": "Points vector distance to the query vector",
|
1362 |
+
"format": "float",
|
1363 |
+
"type": "number"
|
1364 |
+
},
|
1365 |
+
"version": {
|
1366 |
+
"description": "Point version",
|
1367 |
+
"format": "uint64",
|
1368 |
+
"minimum": 0,
|
1369 |
+
"type": "integer"
|
1370 |
+
}
|
1371 |
+
},
|
1372 |
+
"required": [
|
1373 |
+
"id",
|
1374 |
+
"score",
|
1375 |
+
"version"
|
1376 |
+
],
|
1377 |
+
"type": "object"
|
1378 |
+
},
|
1379 |
+
"ScrollRequest": {
|
1380 |
+
"description": "Scroll request - paginate over all points which matches given condition",
|
1381 |
+
"properties": {
|
1382 |
+
"filter": {
|
1383 |
+
"anyOf": [
|
1384 |
+
{
|
1385 |
+
"$ref": "#/components/schemas/Filter"
|
1386 |
+
},
|
1387 |
+
{
|
1388 |
+
"nullable": true
|
1389 |
+
}
|
1390 |
+
],
|
1391 |
+
"description": "Look only for points which satisfies this conditions. If not provided - all points."
|
1392 |
+
},
|
1393 |
+
"limit": {
|
1394 |
+
"description": "Page size. Default: 10",
|
1395 |
+
"format": "uint",
|
1396 |
+
"minimum": 0,
|
1397 |
+
"nullable": true,
|
1398 |
+
"type": "integer"
|
1399 |
+
},
|
1400 |
+
"offset": {
|
1401 |
+
"description": "Start ID to read points from. Default: 0",
|
1402 |
+
"format": "uint64",
|
1403 |
+
"minimum": 0,
|
1404 |
+
"nullable": true,
|
1405 |
+
"type": "integer"
|
1406 |
+
},
|
1407 |
+
"with_payload": {
|
1408 |
+
"anyOf": [
|
1409 |
+
{
|
1410 |
+
"$ref": "#/components/schemas/WithPayloadInterface"
|
1411 |
+
},
|
1412 |
+
{
|
1413 |
+
"nullable": true
|
1414 |
+
}
|
1415 |
+
],
|
1416 |
+
"description": "Return point payload with the result. Default: True"
|
1417 |
+
},
|
1418 |
+
"with_vector": {
|
1419 |
+
"description": "Return point vector with the result. Default: false",
|
1420 |
+
"nullable": true,
|
1421 |
+
"type": "boolean"
|
1422 |
+
}
|
1423 |
+
},
|
1424 |
+
"type": "object"
|
1425 |
+
},
|
1426 |
+
"ScrollResult": {
|
1427 |
+
"description": "Result of the points read request. Contains",
|
1428 |
+
"properties": {
|
1429 |
+
"next_page_offset": {
|
1430 |
+
"description": "Offset which should be used to retrieve a next page result",
|
1431 |
+
"format": "uint64",
|
1432 |
+
"minimum": 0,
|
1433 |
+
"nullable": true,
|
1434 |
+
"type": "integer"
|
1435 |
+
},
|
1436 |
+
"points": {
|
1437 |
+
"description": "List of retrieved points",
|
1438 |
+
"items": {
|
1439 |
+
"$ref": "#/components/schemas/Record"
|
1440 |
+
},
|
1441 |
+
"type": "array"
|
1442 |
+
}
|
1443 |
+
},
|
1444 |
+
"required": [
|
1445 |
+
"points"
|
1446 |
+
],
|
1447 |
+
"type": "object"
|
1448 |
+
},
|
1449 |
+
"SearchParams": {
|
1450 |
+
"description": "Additional parameters of the search",
|
1451 |
+
"properties": {
|
1452 |
+
"hnsw_ef": {
|
1453 |
+
"description": "Params relevant to HNSW index /// Size of the beam in a beam-search. Larger the value - more accurate the result, more time required for search.",
|
1454 |
+
"format": "uint",
|
1455 |
+
"minimum": 0,
|
1456 |
+
"nullable": true,
|
1457 |
+
"type": "integer"
|
1458 |
+
}
|
1459 |
+
},
|
1460 |
+
"type": "object"
|
1461 |
+
},
|
1462 |
+
"SearchRequest": {
|
1463 |
+
"description": "Search request",
|
1464 |
+
"properties": {
|
1465 |
+
"filter": {
|
1466 |
+
"anyOf": [
|
1467 |
+
{
|
1468 |
+
"$ref": "#/components/schemas/Filter"
|
1469 |
+
},
|
1470 |
+
{
|
1471 |
+
"nullable": true
|
1472 |
+
}
|
1473 |
+
],
|
1474 |
+
"description": "Look only for points which satisfies this conditions"
|
1475 |
+
},
|
1476 |
+
"params": {
|
1477 |
+
"anyOf": [
|
1478 |
+
{
|
1479 |
+
"$ref": "#/components/schemas/SearchParams"
|
1480 |
+
},
|
1481 |
+
{
|
1482 |
+
"nullable": true
|
1483 |
+
}
|
1484 |
+
],
|
1485 |
+
"description": "Additional search params"
|
1486 |
+
},
|
1487 |
+
"top": {
|
1488 |
+
"description": "Max number of result to return",
|
1489 |
+
"format": "uint",
|
1490 |
+
"minimum": 0,
|
1491 |
+
"type": "integer"
|
1492 |
+
},
|
1493 |
+
"vector": {
|
1494 |
+
"description": "Look for vectors closest to this",
|
1495 |
+
"items": {
|
1496 |
+
"format": "float",
|
1497 |
+
"type": "number"
|
1498 |
+
},
|
1499 |
+
"type": "array"
|
1500 |
+
},
|
1501 |
+
"with_payload": {
|
1502 |
+
"anyOf": [
|
1503 |
+
{
|
1504 |
+
"$ref": "#/components/schemas/WithPayloadInterface"
|
1505 |
+
},
|
1506 |
+
{
|
1507 |
+
"nullable": true
|
1508 |
+
}
|
1509 |
+
],
|
1510 |
+
"description": "Payload interface"
|
1511 |
+
}
|
1512 |
+
},
|
1513 |
+
"required": [
|
1514 |
+
"top",
|
1515 |
+
"vector"
|
1516 |
+
],
|
1517 |
+
"type": "object"
|
1518 |
+
},
|
1519 |
+
"StorageOperations": {
|
1520 |
+
"anyOf": [
|
1521 |
+
{
|
1522 |
+
"additionalProperties": false,
|
1523 |
+
"description": "Create new collection and (optionally) specify index params",
|
1524 |
+
"properties": {
|
1525 |
+
"create_collection": {
|
1526 |
+
"properties": {
|
1527 |
+
"distance": {
|
1528 |
+
"$ref": "#/components/schemas/Distance"
|
1529 |
+
},
|
1530 |
+
"hnsw_config": {
|
1531 |
+
"anyOf": [
|
1532 |
+
{
|
1533 |
+
"$ref": "#/components/schemas/HnswConfigDiff"
|
1534 |
+
},
|
1535 |
+
{
|
1536 |
+
"nullable": true
|
1537 |
+
}
|
1538 |
+
],
|
1539 |
+
"description": "Custom params for HNSW index. If none - values from service configuration file are used."
|
1540 |
+
},
|
1541 |
+
"name": {
|
1542 |
+
"type": "string"
|
1543 |
+
},
|
1544 |
+
"optimizers_config": {
|
1545 |
+
"anyOf": [
|
1546 |
+
{
|
1547 |
+
"$ref": "#/components/schemas/OptimizersConfigDiff"
|
1548 |
+
},
|
1549 |
+
{
|
1550 |
+
"nullable": true
|
1551 |
+
}
|
1552 |
+
],
|
1553 |
+
"description": "Custom params for Optimizers. If none - values from service configuration file are used."
|
1554 |
+
},
|
1555 |
+
"vector_size": {
|
1556 |
+
"format": "uint",
|
1557 |
+
"minimum": 0,
|
1558 |
+
"type": "integer"
|
1559 |
+
},
|
1560 |
+
"wal_config": {
|
1561 |
+
"anyOf": [
|
1562 |
+
{
|
1563 |
+
"$ref": "#/components/schemas/WalConfigDiff"
|
1564 |
+
},
|
1565 |
+
{
|
1566 |
+
"nullable": true
|
1567 |
+
}
|
1568 |
+
],
|
1569 |
+
"description": "Custom params for WAL. If none - values from service configuration file are used."
|
1570 |
+
}
|
1571 |
+
},
|
1572 |
+
"required": [
|
1573 |
+
"distance",
|
1574 |
+
"name",
|
1575 |
+
"vector_size"
|
1576 |
+
],
|
1577 |
+
"type": "object"
|
1578 |
+
}
|
1579 |
+
},
|
1580 |
+
"required": [
|
1581 |
+
"create_collection"
|
1582 |
+
],
|
1583 |
+
"type": "object"
|
1584 |
+
},
|
1585 |
+
{
|
1586 |
+
"additionalProperties": false,
|
1587 |
+
"description": "Update parameters of the existing collection",
|
1588 |
+
"properties": {
|
1589 |
+
"update_collection": {
|
1590 |
+
"properties": {
|
1591 |
+
"name": {
|
1592 |
+
"type": "string"
|
1593 |
+
},
|
1594 |
+
"optimizers_config": {
|
1595 |
+
"anyOf": [
|
1596 |
+
{
|
1597 |
+
"$ref": "#/components/schemas/OptimizersConfigDiff"
|
1598 |
+
},
|
1599 |
+
{
|
1600 |
+
"nullable": true
|
1601 |
+
}
|
1602 |
+
],
|
1603 |
+
"description": "Custom params for Optimizers. If none - values from service configuration file are used. This operation is blocking, it will only proceed ones all current optimizations are complete"
|
1604 |
+
}
|
1605 |
+
},
|
1606 |
+
"required": [
|
1607 |
+
"name"
|
1608 |
+
],
|
1609 |
+
"type": "object"
|
1610 |
+
}
|
1611 |
+
},
|
1612 |
+
"required": [
|
1613 |
+
"update_collection"
|
1614 |
+
],
|
1615 |
+
"type": "object"
|
1616 |
+
},
|
1617 |
+
{
|
1618 |
+
"additionalProperties": false,
|
1619 |
+
"description": "Delete collection with given name",
|
1620 |
+
"properties": {
|
1621 |
+
"delete_collection": {
|
1622 |
+
"type": "string"
|
1623 |
+
}
|
1624 |
+
},
|
1625 |
+
"required": [
|
1626 |
+
"delete_collection"
|
1627 |
+
],
|
1628 |
+
"type": "object"
|
1629 |
+
},
|
1630 |
+
{
|
1631 |
+
"additionalProperties": false,
|
1632 |
+
"description": "Perform changes of collection aliases. Alias changes are atomic, meaning that no collection modifications can happen between alias operations.",
|
1633 |
+
"properties": {
|
1634 |
+
"change_aliases": {
|
1635 |
+
"properties": {
|
1636 |
+
"actions": {
|
1637 |
+
"items": {
|
1638 |
+
"$ref": "#/components/schemas/AliasOperations"
|
1639 |
+
},
|
1640 |
+
"type": "array"
|
1641 |
+
}
|
1642 |
+
},
|
1643 |
+
"required": [
|
1644 |
+
"actions"
|
1645 |
+
],
|
1646 |
+
"type": "object"
|
1647 |
+
}
|
1648 |
+
},
|
1649 |
+
"required": [
|
1650 |
+
"change_aliases"
|
1651 |
+
],
|
1652 |
+
"type": "object"
|
1653 |
+
}
|
1654 |
+
]
|
1655 |
+
},
|
1656 |
+
"UpdateResult": {
|
1657 |
+
"properties": {
|
1658 |
+
"operation_id": {
|
1659 |
+
"description": "Sequential number of the operation",
|
1660 |
+
"format": "uint64",
|
1661 |
+
"minimum": 0,
|
1662 |
+
"type": "integer"
|
1663 |
+
},
|
1664 |
+
"status": {
|
1665 |
+
"$ref": "#/components/schemas/UpdateStatus"
|
1666 |
+
}
|
1667 |
+
},
|
1668 |
+
"required": [
|
1669 |
+
"operation_id",
|
1670 |
+
"status"
|
1671 |
+
],
|
1672 |
+
"type": "object"
|
1673 |
+
},
|
1674 |
+
"UpdateStatus": {
|
1675 |
+
"enum": [
|
1676 |
+
"acknowledged",
|
1677 |
+
"completed"
|
1678 |
+
],
|
1679 |
+
"type": "string"
|
1680 |
+
},
|
1681 |
+
"WalConfig": {
|
1682 |
+
"properties": {
|
1683 |
+
"wal_capacity_mb": {
|
1684 |
+
"description": "Size of a single WAL segment in MB",
|
1685 |
+
"format": "uint",
|
1686 |
+
"minimum": 0,
|
1687 |
+
"type": "integer"
|
1688 |
+
},
|
1689 |
+
"wal_segments_ahead": {
|
1690 |
+
"description": "Number of WAL segments to create ahead of actually used ones",
|
1691 |
+
"format": "uint",
|
1692 |
+
"minimum": 0,
|
1693 |
+
"type": "integer"
|
1694 |
+
}
|
1695 |
+
},
|
1696 |
+
"required": [
|
1697 |
+
"wal_capacity_mb",
|
1698 |
+
"wal_segments_ahead"
|
1699 |
+
],
|
1700 |
+
"type": "object"
|
1701 |
+
},
|
1702 |
+
"WalConfigDiff": {
|
1703 |
+
"properties": {
|
1704 |
+
"wal_capacity_mb": {
|
1705 |
+
"description": "Size of a single WAL segment in MB",
|
1706 |
+
"format": "uint",
|
1707 |
+
"minimum": 0,
|
1708 |
+
"nullable": true,
|
1709 |
+
"type": "integer"
|
1710 |
+
},
|
1711 |
+
"wal_segments_ahead": {
|
1712 |
+
"description": "Number of WAL segments to create ahead of actually used ones",
|
1713 |
+
"format": "uint",
|
1714 |
+
"minimum": 0,
|
1715 |
+
"nullable": true,
|
1716 |
+
"type": "integer"
|
1717 |
+
}
|
1718 |
+
},
|
1719 |
+
"type": "object"
|
1720 |
+
},
|
1721 |
+
"WithPayloadInterface": {
|
1722 |
+
"anyOf": [
|
1723 |
+
{
|
1724 |
+
"type": "boolean"
|
1725 |
+
},
|
1726 |
+
{
|
1727 |
+
"items": {
|
1728 |
+
"type": "string"
|
1729 |
+
},
|
1730 |
+
"type": "array"
|
1731 |
+
},
|
1732 |
+
{
|
1733 |
+
"$ref": "#/components/schemas/PayloadSelector"
|
1734 |
+
}
|
1735 |
+
]
|
1736 |
+
}
|
1737 |
+
}
|
1738 |
+
},
|
1739 |
+
"externalDocs": {
|
1740 |
+
"description": "Find out more about Qdrant aplications and demo",
|
1741 |
+
"url": "demo.qdrant.tech"
|
1742 |
+
},
|
1743 |
+
"info": {
|
1744 |
+
"contact": {
|
1745 |
+
"email": "[email protected]"
|
1746 |
+
},
|
1747 |
+
"description": "\nAPI description for Qdrant vector search engine.\n\nThis document describes CRUD and search operations on collections of points (vectors with payload).\n\nQdrant supports any combinations of `should`, `must` and `must_not` conditions, which makes it possible to use in applications when object could not be described solely by vector. It could be location features, availability flags, and other custom properties businesses should take into account.\n## Examples\nThis examples cover the most basic use-cases - collection creation and basic vector search.\n### Create collection\nFirst - let's create a collection with dot-production metric.\n```\ncurl -X POST 'http://localhost:6333/collections' \\\n -H 'Content-Type: application/json' \\\n --data-raw '{\n \"create_collection\": {\n \"name\": \"test_collection\",\n \"vector_size\": 4,\n \"distance\": \"Dot\"\n }\n }'\n```\nExpected response:\n```\n{\n \"result\": true,\n \"status\": \"ok\",\n \"time\": 0.031095451\n}\n```\nWe can ensure that collection was created:\n```\ncurl 'http://localhost:6333/collections/test_collection'\n```\nExpected response:\n```\n{\n \"result\": {\n \"status\": \"green\",\n \"vectors_count\": 0,\n \"segments_count\": 5,\n \"disk_data_size\": 0,\n \"ram_data_size\": 0,\n \"config\": {\n \"params\": {\n \"vector_size\": 4,\n \"distance\": \"Dot\"\n },\n \"hnsw_config\": {\n \"m\": 16,\n \"ef_construct\": 100,\n \"full_scan_threshold\": 10000\n },\n \"optimizer_config\": {\n \"deleted_threshold\": 0.2,\n \"vacuum_min_vector_number\": 1000,\n \"max_segment_number\": 5,\n \"memmap_threshold\": 50000,\n \"indexing_threshold\": 20000,\n \"payload_indexing_threshold\": 10000,\n \"flush_interval_sec\": 1\n },\n \"wal_config\": {\n \"wal_capacity_mb\": 32,\n \"wal_segments_ahead\": 0\n }\n }\n },\n \"status\": \"ok\",\n \"time\": 2.1199e-05\n}\n```\n\n### Add points\nLet's now add vectors with some payload:\n```\ncurl -L -X POST 'http://localhost:6333/collections/test_collection?wait=true' \\ -H 'Content-Type: application/json' \\ --data-raw '{\n \"upsert_points\": {\n \"points\": [\n {\"id\": 1, \"vector\": [0.05, 0.61, 0.76, 0.74], \"payload\": {\"city\": {\"type\": \"keyword\", \"value\": \"Berlin\"}}},\n {\"id\": 2, \"vector\": [0.19, 0.81, 0.75, 0.11], \"payload\": {\"city\": {\"type\": \"keyword\", \"value\": [\"Berlin\", \"London\"] }}},\n {\"id\": 3, \"vector\": [0.36, 0.55, 0.47, 0.94], \"payload\": {\"city\": {\"type\": \"keyword\", \"value\": [\"Berlin\", \"Moscow\"] }}},\n {\"id\": 4, \"vector\": [0.18, 0.01, 0.85, 0.80], \"payload\": {\"city\": {\"type\": \"keyword\", \"value\": [\"London\", \"Moscow\"]}}},\n {\"id\": 5, \"vector\": [0.24, 0.18, 0.22, 0.44], \"payload\": {\"count\": {\"type\": \"integer\", \"value\": [0]}}},\n {\"id\": 6, \"vector\": [0.35, 0.08, 0.11, 0.44]}\n ]\n }\n}'\n```\nExpected response:\n```\n{\n \"result\": {\n \"operation_id\": 0,\n \"status\": \"completed\"\n },\n \"status\": \"ok\",\n \"time\": 0.000206061\n}\n```\n### Search with filtering\nLet's start with a basic request:\n```\ncurl -L -X POST 'http://localhost:6333/collections/test_collection/points/search' \\ -H 'Content-Type: application/json' \\ --data-raw '{\n \"vector\": [0.2,0.1,0.9,0.7],\n \"top\": 3\n}'\n```\nExpected response:\n```\n{\n \"result\": [\n { \"id\": 4, \"score\": 1.362 },\n { \"id\": 1, \"score\": 1.273 },\n { \"id\": 3, \"score\": 1.208 }\n ],\n \"status\": \"ok\",\n \"time\": 0.000055785\n}\n```\nBut result is different if we add a filter:\n```\ncurl -L -X POST 'http://localhost:6333/collections/test_collection/points/search' \\ -H 'Content-Type: application/json' \\ --data-raw '{\n \"filter\": {\n \"should\": [\n {\n \"key\": \"city\",\n \"match\": {\n \"keyword\": \"London\"\n }\n }\n ]\n },\n \"vector\": [0.2, 0.1, 0.9, 0.7],\n \"top\": 3\n}'\n```\nExpected response:\n```\n{\n \"result\": [\n { \"id\": 4, \"score\": 1.362 },\n { \"id\": 2, \"score\": 0.871 }\n ],\n \"status\": \"ok\",\n \"time\": 0.000093972\n}\n```\n",
|
1748 |
+
"license": {
|
1749 |
+
"name": "Apache 2.0",
|
1750 |
+
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
|
1751 |
+
},
|
1752 |
+
"title": "Qdrant API",
|
1753 |
+
"version": "0.4.2"
|
1754 |
+
},
|
1755 |
+
"openapi": "3.0.1",
|
1756 |
+
"paths": {
|
1757 |
+
"/collections": {
|
1758 |
+
"get": {
|
1759 |
+
"operationId": "get_collections",
|
1760 |
+
"responses": {
|
1761 |
+
"200": {
|
1762 |
+
"content": {
|
1763 |
+
"application/json": {
|
1764 |
+
"schema": {
|
1765 |
+
"properties": {
|
1766 |
+
"result": {
|
1767 |
+
"$ref": "#/components/schemas/CollectionsResponse"
|
1768 |
+
},
|
1769 |
+
"status": {
|
1770 |
+
"enum": [
|
1771 |
+
"ok"
|
1772 |
+
],
|
1773 |
+
"type": "string"
|
1774 |
+
},
|
1775 |
+
"time": {
|
1776 |
+
"description": "Time spent to process this request",
|
1777 |
+
"format": "float",
|
1778 |
+
"type": "number"
|
1779 |
+
}
|
1780 |
+
},
|
1781 |
+
"type": "object"
|
1782 |
+
}
|
1783 |
+
}
|
1784 |
+
},
|
1785 |
+
"description": "successful operation"
|
1786 |
+
},
|
1787 |
+
"default": {
|
1788 |
+
"content": {
|
1789 |
+
"application/json": {
|
1790 |
+
"schema": {
|
1791 |
+
"$ref": "#/components/schemas/ErrorResponse"
|
1792 |
+
}
|
1793 |
+
}
|
1794 |
+
},
|
1795 |
+
"description": "error"
|
1796 |
+
}
|
1797 |
+
},
|
1798 |
+
"summary": "Get list of existing collections",
|
1799 |
+
"tags": [
|
1800 |
+
"collections"
|
1801 |
+
]
|
1802 |
+
},
|
1803 |
+
"post": {
|
1804 |
+
"operationId": "update_collections",
|
1805 |
+
"requestBody": {
|
1806 |
+
"content": {
|
1807 |
+
"application/json": {
|
1808 |
+
"schema": {
|
1809 |
+
"$ref": "#/components/schemas/StorageOperations"
|
1810 |
+
}
|
1811 |
+
}
|
1812 |
+
},
|
1813 |
+
"description": "Operation to perform on collections"
|
1814 |
+
},
|
1815 |
+
"responses": {
|
1816 |
+
"200": {
|
1817 |
+
"content": {
|
1818 |
+
"application/json": {
|
1819 |
+
"schema": {
|
1820 |
+
"properties": {
|
1821 |
+
"result": {
|
1822 |
+
"type": "boolean"
|
1823 |
+
},
|
1824 |
+
"status": {
|
1825 |
+
"enum": [
|
1826 |
+
"ok"
|
1827 |
+
],
|
1828 |
+
"type": "string"
|
1829 |
+
},
|
1830 |
+
"time": {
|
1831 |
+
"description": "Time spent to process this request",
|
1832 |
+
"format": "float",
|
1833 |
+
"type": "number"
|
1834 |
+
}
|
1835 |
+
},
|
1836 |
+
"type": "object"
|
1837 |
+
}
|
1838 |
+
}
|
1839 |
+
},
|
1840 |
+
"description": "successful operation"
|
1841 |
+
},
|
1842 |
+
"default": {
|
1843 |
+
"content": {
|
1844 |
+
"application/json": {
|
1845 |
+
"schema": {
|
1846 |
+
"$ref": "#/components/schemas/ErrorResponse"
|
1847 |
+
}
|
1848 |
+
}
|
1849 |
+
},
|
1850 |
+
"description": "error"
|
1851 |
+
}
|
1852 |
+
},
|
1853 |
+
"summary": "Perform update operation on collections",
|
1854 |
+
"tags": [
|
1855 |
+
"collections"
|
1856 |
+
]
|
1857 |
+
}
|
1858 |
+
},
|
1859 |
+
"/collections/{name}": {
|
1860 |
+
"get": {
|
1861 |
+
"operationId": "get_collection",
|
1862 |
+
"parameters": [
|
1863 |
+
{
|
1864 |
+
"description": "Name of the collection to retrieve",
|
1865 |
+
"in": "path",
|
1866 |
+
"name": "name",
|
1867 |
+
"required": true,
|
1868 |
+
"schema": {
|
1869 |
+
"type": "string"
|
1870 |
+
}
|
1871 |
+
}
|
1872 |
+
],
|
1873 |
+
"responses": {
|
1874 |
+
"200": {
|
1875 |
+
"content": {
|
1876 |
+
"application/json": {
|
1877 |
+
"schema": {
|
1878 |
+
"properties": {
|
1879 |
+
"result": {
|
1880 |
+
"$ref": "#/components/schemas/CollectionInfo"
|
1881 |
+
},
|
1882 |
+
"status": {
|
1883 |
+
"enum": [
|
1884 |
+
"ok"
|
1885 |
+
],
|
1886 |
+
"type": "string"
|
1887 |
+
},
|
1888 |
+
"time": {
|
1889 |
+
"description": "Time spent to process this request",
|
1890 |
+
"format": "float",
|
1891 |
+
"type": "number"
|
1892 |
+
}
|
1893 |
+
},
|
1894 |
+
"type": "object"
|
1895 |
+
}
|
1896 |
+
}
|
1897 |
+
},
|
1898 |
+
"description": "successful operation"
|
1899 |
+
},
|
1900 |
+
"default": {
|
1901 |
+
"content": {
|
1902 |
+
"application/json": {
|
1903 |
+
"schema": {
|
1904 |
+
"$ref": "#/components/schemas/ErrorResponse"
|
1905 |
+
}
|
1906 |
+
}
|
1907 |
+
},
|
1908 |
+
"description": "error"
|
1909 |
+
}
|
1910 |
+
},
|
1911 |
+
"summary": "Get information about existing collection",
|
1912 |
+
"tags": [
|
1913 |
+
"collections"
|
1914 |
+
]
|
1915 |
+
},
|
1916 |
+
"post": {
|
1917 |
+
"operationId": "update_points",
|
1918 |
+
"parameters": [
|
1919 |
+
{
|
1920 |
+
"description": "Name of the collection to search in",
|
1921 |
+
"in": "path",
|
1922 |
+
"name": "name",
|
1923 |
+
"required": true,
|
1924 |
+
"schema": {
|
1925 |
+
"type": "string"
|
1926 |
+
}
|
1927 |
+
},
|
1928 |
+
{
|
1929 |
+
"description": "Wait for changes to actually happen? Default: false",
|
1930 |
+
"in": "query",
|
1931 |
+
"name": "wait",
|
1932 |
+
"required": false,
|
1933 |
+
"schema": {
|
1934 |
+
"type": "boolean"
|
1935 |
+
}
|
1936 |
+
}
|
1937 |
+
],
|
1938 |
+
"requestBody": {
|
1939 |
+
"content": {
|
1940 |
+
"application/json": {
|
1941 |
+
"schema": {
|
1942 |
+
"$ref": "#/components/schemas/CollectionUpdateOperations"
|
1943 |
+
}
|
1944 |
+
}
|
1945 |
+
},
|
1946 |
+
"description": "Collection update operations"
|
1947 |
+
},
|
1948 |
+
"responses": {
|
1949 |
+
"200": {
|
1950 |
+
"content": {
|
1951 |
+
"application/json": {
|
1952 |
+
"schema": {
|
1953 |
+
"properties": {
|
1954 |
+
"result": {
|
1955 |
+
"$ref": "#/components/schemas/UpdateResult"
|
1956 |
+
},
|
1957 |
+
"status": {
|
1958 |
+
"enum": [
|
1959 |
+
"ok"
|
1960 |
+
],
|
1961 |
+
"type": "string"
|
1962 |
+
},
|
1963 |
+
"time": {
|
1964 |
+
"description": "Time spent to process this request",
|
1965 |
+
"format": "float",
|
1966 |
+
"type": "number"
|
1967 |
+
}
|
1968 |
+
},
|
1969 |
+
"type": "object"
|
1970 |
+
}
|
1971 |
+
}
|
1972 |
+
},
|
1973 |
+
"description": "successful operation"
|
1974 |
+
},
|
1975 |
+
"default": {
|
1976 |
+
"content": {
|
1977 |
+
"application/json": {
|
1978 |
+
"schema": {
|
1979 |
+
"$ref": "#/components/schemas/ErrorResponse"
|
1980 |
+
}
|
1981 |
+
}
|
1982 |
+
},
|
1983 |
+
"description": "error"
|
1984 |
+
}
|
1985 |
+
},
|
1986 |
+
"summary": "Update points (vectors, payloads, indexes) in collection",
|
1987 |
+
"tags": [
|
1988 |
+
"points"
|
1989 |
+
]
|
1990 |
+
}
|
1991 |
+
},
|
1992 |
+
"/collections/{name}/points": {
|
1993 |
+
"post": {
|
1994 |
+
"operationId": "get_points",
|
1995 |
+
"parameters": [
|
1996 |
+
{
|
1997 |
+
"description": "Name of the collection to retrieve from",
|
1998 |
+
"in": "path",
|
1999 |
+
"name": "name",
|
2000 |
+
"required": true,
|
2001 |
+
"schema": {
|
2002 |
+
"type": "string"
|
2003 |
+
}
|
2004 |
+
}
|
2005 |
+
],
|
2006 |
+
"requestBody": {
|
2007 |
+
"content": {
|
2008 |
+
"application/json": {
|
2009 |
+
"schema": {
|
2010 |
+
"$ref": "#/components/schemas/PointRequest"
|
2011 |
+
}
|
2012 |
+
}
|
2013 |
+
},
|
2014 |
+
"description": "List of points to retrieve"
|
2015 |
+
},
|
2016 |
+
"responses": {
|
2017 |
+
"200": {
|
2018 |
+
"content": {
|
2019 |
+
"application/json": {
|
2020 |
+
"schema": {
|
2021 |
+
"properties": {
|
2022 |
+
"result": {
|
2023 |
+
"items": {
|
2024 |
+
"$ref": "#/components/schemas/Record"
|
2025 |
+
},
|
2026 |
+
"type": "array"
|
2027 |
+
},
|
2028 |
+
"status": {
|
2029 |
+
"enum": [
|
2030 |
+
"ok"
|
2031 |
+
],
|
2032 |
+
"type": "string"
|
2033 |
+
},
|
2034 |
+
"time": {
|
2035 |
+
"description": "Time spent to process this request",
|
2036 |
+
"format": "float",
|
2037 |
+
"type": "number"
|
2038 |
+
}
|
2039 |
+
},
|
2040 |
+
"type": "object"
|
2041 |
+
}
|
2042 |
+
}
|
2043 |
+
},
|
2044 |
+
"description": "successful operation"
|
2045 |
+
},
|
2046 |
+
"default": {
|
2047 |
+
"content": {
|
2048 |
+
"application/json": {
|
2049 |
+
"schema": {
|
2050 |
+
"$ref": "#/components/schemas/ErrorResponse"
|
2051 |
+
}
|
2052 |
+
}
|
2053 |
+
},
|
2054 |
+
"description": "error"
|
2055 |
+
}
|
2056 |
+
},
|
2057 |
+
"summary": "Retrieve points by ids",
|
2058 |
+
"tags": [
|
2059 |
+
"points"
|
2060 |
+
]
|
2061 |
+
}
|
2062 |
+
},
|
2063 |
+
"/collections/{name}/points/recommend": {
|
2064 |
+
"post": {
|
2065 |
+
"operationId": "recommend_points",
|
2066 |
+
"parameters": [
|
2067 |
+
{
|
2068 |
+
"description": "Name of the collection to search in",
|
2069 |
+
"in": "path",
|
2070 |
+
"name": "name",
|
2071 |
+
"required": true,
|
2072 |
+
"schema": {
|
2073 |
+
"type": "string"
|
2074 |
+
}
|
2075 |
+
}
|
2076 |
+
],
|
2077 |
+
"requestBody": {
|
2078 |
+
"content": {
|
2079 |
+
"application/json": {
|
2080 |
+
"schema": {
|
2081 |
+
"$ref": "#/components/schemas/RecommendRequest"
|
2082 |
+
}
|
2083 |
+
}
|
2084 |
+
},
|
2085 |
+
"description": "Request points based on positive and negative examples."
|
2086 |
+
},
|
2087 |
+
"responses": {
|
2088 |
+
"200": {
|
2089 |
+
"content": {
|
2090 |
+
"application/json": {
|
2091 |
+
"schema": {
|
2092 |
+
"properties": {
|
2093 |
+
"result": {
|
2094 |
+
"items": {
|
2095 |
+
"$ref": "#/components/schemas/ScoredPoint"
|
2096 |
+
},
|
2097 |
+
"type": "array"
|
2098 |
+
},
|
2099 |
+
"status": {
|
2100 |
+
"enum": [
|
2101 |
+
"ok"
|
2102 |
+
],
|
2103 |
+
"type": "string"
|
2104 |
+
},
|
2105 |
+
"time": {
|
2106 |
+
"description": "Time spent to process this request",
|
2107 |
+
"format": "float",
|
2108 |
+
"type": "number"
|
2109 |
+
}
|
2110 |
+
},
|
2111 |
+
"type": "object"
|
2112 |
+
}
|
2113 |
+
}
|
2114 |
+
},
|
2115 |
+
"description": "successful operation"
|
2116 |
+
},
|
2117 |
+
"default": {
|
2118 |
+
"content": {
|
2119 |
+
"application/json": {
|
2120 |
+
"schema": {
|
2121 |
+
"$ref": "#/components/schemas/ErrorResponse"
|
2122 |
+
}
|
2123 |
+
}
|
2124 |
+
},
|
2125 |
+
"description": "error"
|
2126 |
+
}
|
2127 |
+
},
|
2128 |
+
"summary": "Recommend points",
|
2129 |
+
"tags": [
|
2130 |
+
"points"
|
2131 |
+
]
|
2132 |
+
}
|
2133 |
+
},
|
2134 |
+
"/collections/{name}/points/scroll": {
|
2135 |
+
"post": {
|
2136 |
+
"description": "Scroll request - paginate over all points which matches given condition",
|
2137 |
+
"operationId": "scroll_points",
|
2138 |
+
"parameters": [
|
2139 |
+
{
|
2140 |
+
"description": "Name of the collection to retrieve from",
|
2141 |
+
"in": "path",
|
2142 |
+
"name": "name",
|
2143 |
+
"required": true,
|
2144 |
+
"schema": {
|
2145 |
+
"type": "string"
|
2146 |
+
}
|
2147 |
+
}
|
2148 |
+
],
|
2149 |
+
"requestBody": {
|
2150 |
+
"content": {
|
2151 |
+
"application/json": {
|
2152 |
+
"schema": {
|
2153 |
+
"$ref": "#/components/schemas/ScrollRequest"
|
2154 |
+
}
|
2155 |
+
}
|
2156 |
+
},
|
2157 |
+
"description": "Pagination and filter parameters"
|
2158 |
+
},
|
2159 |
+
"responses": {
|
2160 |
+
"200": {
|
2161 |
+
"content": {
|
2162 |
+
"application/json": {
|
2163 |
+
"schema": {
|
2164 |
+
"properties": {
|
2165 |
+
"result": {
|
2166 |
+
"$ref": "#/components/schemas/ScrollResult"
|
2167 |
+
},
|
2168 |
+
"status": {
|
2169 |
+
"enum": [
|
2170 |
+
"ok"
|
2171 |
+
],
|
2172 |
+
"type": "string"
|
2173 |
+
},
|
2174 |
+
"time": {
|
2175 |
+
"description": "Time spent to process this request",
|
2176 |
+
"format": "float",
|
2177 |
+
"type": "number"
|
2178 |
+
}
|
2179 |
+
},
|
2180 |
+
"type": "object"
|
2181 |
+
}
|
2182 |
+
}
|
2183 |
+
},
|
2184 |
+
"description": "successful operation"
|
2185 |
+
},
|
2186 |
+
"default": {
|
2187 |
+
"content": {
|
2188 |
+
"application/json": {
|
2189 |
+
"schema": {
|
2190 |
+
"$ref": "#/components/schemas/ErrorResponse"
|
2191 |
+
}
|
2192 |
+
}
|
2193 |
+
},
|
2194 |
+
"description": "error"
|
2195 |
+
}
|
2196 |
+
},
|
2197 |
+
"summary": "Scroll points",
|
2198 |
+
"tags": [
|
2199 |
+
"points"
|
2200 |
+
]
|
2201 |
+
}
|
2202 |
+
},
|
2203 |
+
"/collections/{name}/points/search": {
|
2204 |
+
"post": {
|
2205 |
+
"operationId": "search_points",
|
2206 |
+
"parameters": [
|
2207 |
+
{
|
2208 |
+
"description": "Name of the collection to search in",
|
2209 |
+
"in": "path",
|
2210 |
+
"name": "name",
|
2211 |
+
"required": true,
|
2212 |
+
"schema": {
|
2213 |
+
"type": "string"
|
2214 |
+
}
|
2215 |
+
}
|
2216 |
+
],
|
2217 |
+
"requestBody": {
|
2218 |
+
"content": {
|
2219 |
+
"application/json": {
|
2220 |
+
"schema": {
|
2221 |
+
"$ref": "#/components/schemas/SearchRequest"
|
2222 |
+
}
|
2223 |
+
}
|
2224 |
+
},
|
2225 |
+
"description": "Search request with optional filtering"
|
2226 |
+
},
|
2227 |
+
"responses": {
|
2228 |
+
"200": {
|
2229 |
+
"content": {
|
2230 |
+
"application/json": {
|
2231 |
+
"schema": {
|
2232 |
+
"properties": {
|
2233 |
+
"result": {
|
2234 |
+
"items": {
|
2235 |
+
"$ref": "#/components/schemas/ScoredPoint"
|
2236 |
+
},
|
2237 |
+
"type": "array"
|
2238 |
+
},
|
2239 |
+
"status": {
|
2240 |
+
"enum": [
|
2241 |
+
"ok"
|
2242 |
+
],
|
2243 |
+
"type": "string"
|
2244 |
+
},
|
2245 |
+
"time": {
|
2246 |
+
"description": "Time spent to process this request",
|
2247 |
+
"format": "float",
|
2248 |
+
"type": "number"
|
2249 |
+
}
|
2250 |
+
},
|
2251 |
+
"type": "object"
|
2252 |
+
}
|
2253 |
+
}
|
2254 |
+
},
|
2255 |
+
"description": "successful operation"
|
2256 |
+
},
|
2257 |
+
"default": {
|
2258 |
+
"content": {
|
2259 |
+
"application/json": {
|
2260 |
+
"schema": {
|
2261 |
+
"$ref": "#/components/schemas/ErrorResponse"
|
2262 |
+
}
|
2263 |
+
}
|
2264 |
+
},
|
2265 |
+
"description": "error"
|
2266 |
+
}
|
2267 |
+
},
|
2268 |
+
"summary": "Search points",
|
2269 |
+
"tags": [
|
2270 |
+
"points"
|
2271 |
+
]
|
2272 |
+
}
|
2273 |
+
},
|
2274 |
+
"/collections/{name}/points/{id}": {
|
2275 |
+
"get": {
|
2276 |
+
"operationId": "get_point",
|
2277 |
+
"parameters": [
|
2278 |
+
{
|
2279 |
+
"description": "Name of the collection to retrieve from",
|
2280 |
+
"in": "path",
|
2281 |
+
"name": "name",
|
2282 |
+
"required": true,
|
2283 |
+
"schema": {
|
2284 |
+
"type": "string"
|
2285 |
+
}
|
2286 |
+
},
|
2287 |
+
{
|
2288 |
+
"description": "Id of the point",
|
2289 |
+
"in": "path",
|
2290 |
+
"name": "id",
|
2291 |
+
"required": true,
|
2292 |
+
"schema": {
|
2293 |
+
"type": "integer"
|
2294 |
+
}
|
2295 |
+
}
|
2296 |
+
],
|
2297 |
+
"responses": {
|
2298 |
+
"200": {
|
2299 |
+
"content": {
|
2300 |
+
"application/json": {
|
2301 |
+
"schema": {
|
2302 |
+
"properties": {
|
2303 |
+
"result": {
|
2304 |
+
"$ref": "#/components/schemas/Record"
|
2305 |
+
},
|
2306 |
+
"status": {
|
2307 |
+
"enum": [
|
2308 |
+
"ok"
|
2309 |
+
],
|
2310 |
+
"type": "string"
|
2311 |
+
},
|
2312 |
+
"time": {
|
2313 |
+
"description": "Time spent to process this request",
|
2314 |
+
"format": "float",
|
2315 |
+
"type": "number"
|
2316 |
+
}
|
2317 |
+
},
|
2318 |
+
"type": "object"
|
2319 |
+
}
|
2320 |
+
}
|
2321 |
+
},
|
2322 |
+
"description": "successful operation"
|
2323 |
+
},
|
2324 |
+
"default": {
|
2325 |
+
"content": {
|
2326 |
+
"application/json": {
|
2327 |
+
"schema": {
|
2328 |
+
"$ref": "#/components/schemas/ErrorResponse"
|
2329 |
+
}
|
2330 |
+
}
|
2331 |
+
},
|
2332 |
+
"description": "error"
|
2333 |
+
}
|
2334 |
+
},
|
2335 |
+
"summary": "Retrieve point by id",
|
2336 |
+
"tags": [
|
2337 |
+
"points"
|
2338 |
+
]
|
2339 |
+
}
|
2340 |
+
}
|
2341 |
+
},
|
2342 |
+
"servers": [
|
2343 |
+
{
|
2344 |
+
"url": "http://localhost:6333"
|
2345 |
+
}
|
2346 |
+
],
|
2347 |
+
"tags": [
|
2348 |
+
{
|
2349 |
+
"description": "Searchable collections of points.",
|
2350 |
+
"name": "collections"
|
2351 |
+
},
|
2352 |
+
{
|
2353 |
+
"description": "Float-point vectors with payload.",
|
2354 |
+
"name": "points"
|
2355 |
+
}
|
2356 |
+
]
|
2357 |
+
}
|
docs/redoc/v0.5.0/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.5.1/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.6.0/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.7.0/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.8.0/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.8.1/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.8.2/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.8.3/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.8.4/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.8.5/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.8.6/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.9.0/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v0.9.1/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v1.0.1/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v1.0.2/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v1.0.3/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v1.1.0/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v1.1.1/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v1.1.2/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v1.1.3/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v1.10.x/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v1.11.x/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
docs/redoc/v1.12.x/openapi.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|