Qdrant Indexes API

Indexes for payloads associated with points.

OpenAPI Specification

qdrant-indexes-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Qdrant Aliases Indexes API
  description: "API 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`, `min_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 PUT 'http://localhost:6333/collections/test_collection' \\\n  -H 'Content-Type: application/json' \\\n  --data-raw '{\n    \"vectors\": {\n      \"size\": 4,\n      \"distance\": \"Dot\"\n    }\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    \"segments_count\": 5,\n    \"disk_data_size\": 0,\n    \"ram_data_size\": 0,\n    \"config\": {\n      \"params\": {\n        \"vectors\": {\n          \"size\": 4,\n          \"distance\": \"Dot\"\n        }\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        \"default_segment_number\": 2,\n        \"max_segment_size\": null,\n        \"memmap_threshold\": null,\n        \"indexing_threshold\": 20000,\n        \"flush_interval_sec\": 5,\n        \"max_optimization_threads\": null\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 PUT 'http://localhost:6333/collections/test_collection/points?wait=true' \\ -H 'Content-Type: application/json' \\ --data-raw '{\n  \"points\": [\n    {\"id\": 1, \"vector\": [0.05, 0.61, 0.76, 0.74], \"payload\": {\"city\": \"Berlin\"}},\n    {\"id\": 2, \"vector\": [0.19, 0.81, 0.75, 0.11], \"payload\": {\"city\": [\"Berlin\", \"London\"] }},\n    {\"id\": 3, \"vector\": [0.36, 0.55, 0.47, 0.94], \"payload\": {\"city\": [\"Berlin\", \"Moscow\"] }},\n    {\"id\": 4, \"vector\": [0.18, 0.01, 0.85, 0.80], \"payload\": {\"city\": [\"London\", \"Moscow\"] }},\n    {\"id\": 5, \"vector\": [0.24, 0.18, 0.22, 0.44], \"payload\": {\"count\": [0]}},\n    {\"id\": 6, \"vector\": [0.35, 0.08, 0.11, 0.44]}\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, \"payload\": null, \"version\": 0 },\n        { \"id\": 1, \"score\": 1.273, \"payload\": null, \"version\": 0 },\n        { \"id\": 3, \"score\": 1.208, \"payload\": null, \"version\": 0 }\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                    \"value\": \"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, \"payload\": null, \"version\": 0 },\n        { \"id\": 2, \"score\": 0.871, \"payload\": null, \"version\": 0 }\n    ],\n    \"status\": \"ok\",\n    \"time\": 0.000093972\n}\n```\n"
  contact:
    email: andrey@vasnetsov.com
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
  version: master
servers:
- url: '{protocol}://{hostname}:{port}'
  variables:
    protocol:
      enum:
      - http
      - https
      default: http
    hostname:
      default: localhost
    port:
      default: '6333'
security:
- api-key: []
- bearerAuth: []
- {}
tags:
- name: Indexes
  description: Indexes for payloads associated with points.
paths:
  /collections/{collection_name}/index:
    put:
      tags:
      - Indexes
      summary: Create index for field in collection
      description: Create index for field in collection
      operationId: create_field_index
      parameters:
      - name: collection_name
        in: path
        description: Name of the collection
        required: true
        schema:
          type: string
      - name: wait
        in: query
        description: If true, wait for changes to actually happen
        required: false
        schema:
          type: boolean
      - name: ordering
        in: query
        description: define ordering guarantees for the operation
        required: false
        schema:
          $ref: '#/components/schemas/WriteOrdering'
      - name: timeout
        in: query
        description: Timeout for the operation
        required: false
        schema:
          type: integer
          minimum: 1
      requestBody:
        description: Field name
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateFieldIndex'
      responses:
        default:
          description: error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        4XX:
          description: error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  usage:
                    default: null
                    anyOf:
                    - $ref: '#/components/schemas/Usage'
                    - nullable: true
                  time:
                    type: number
                    format: float
                    description: Time spent to process this request
                    example: 0.002
                  status:
                    type: string
                    example: ok
                  result:
                    $ref: '#/components/schemas/UpdateResult'
  /collections/{collection_name}/index/{field_name}:
    delete:
      tags:
      - Indexes
      summary: Delete index for field in collection
      description: Delete field index for collection
      operationId: delete_field_index
      parameters:
      - name: collection_name
        in: path
        description: Name of the collection
        required: true
        schema:
          type: string
      - name: field_name
        in: path
        description: Name of the field where to delete the index
        required: true
        schema:
          type: string
      - name: wait
        in: query
        description: If true, wait for changes to actually happen
        required: false
        schema:
          type: boolean
      - name: ordering
        in: query
        description: define ordering guarantees for the operation
        required: false
        schema:
          $ref: '#/components/schemas/WriteOrdering'
      - name: timeout
        in: query
        description: Timeout for the operation
        required: false
        schema:
          type: integer
          minimum: 1
      responses:
        default:
          description: error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        4XX:
          description: error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  usage:
                    default: null
                    anyOf:
                    - $ref: '#/components/schemas/Usage'
                    - nullable: true
                  time:
                    type: number
                    format: float
                    description: Time spent to process this request
                    example: 0.002
                  status:
                    type: string
                    example: ok
                  result:
                    $ref: '#/components/schemas/UpdateResult'
components:
  schemas:
    HardwareUsage:
      description: Usage of the hardware resources, spent to process the request
      type: object
      required:
      - cpu
      - payload_index_io_read
      - payload_index_io_write
      - payload_io_read
      - payload_io_write
      - vector_io_read
      - vector_io_write
      properties:
        cpu:
          type: integer
          format: uint
          minimum: 0
        payload_io_read:
          type: integer
          format: uint
          minimum: 0
        payload_io_write:
          type: integer
          format: uint
          minimum: 0
        payload_index_io_read:
          type: integer
          format: uint
          minimum: 0
        payload_index_io_write:
          type: integer
          format: uint
          minimum: 0
        vector_io_read:
          type: integer
          format: uint
          minimum: 0
        vector_io_write:
          type: integer
          format: uint
          minimum: 0
    KeywordIndexType:
      type: string
      enum:
      - keyword
    TextIndexParams:
      type: object
      required:
      - type
      properties:
        type:
          $ref: '#/components/schemas/TextIndexType'
        tokenizer:
          $ref: '#/components/schemas/TokenizerType'
        min_token_len:
          description: Minimum characters to be tokenized.
          type: integer
          format: uint
          minimum: 0
          nullable: true
        max_token_len:
          description: Maximum characters to be tokenized.
          type: integer
          format: uint
          minimum: 0
          nullable: true
        lowercase:
          description: 'If true, lowercase all tokens. Default: true.'
          type: boolean
          nullable: true
        ascii_folding:
          description: 'If true, normalize tokens by folding accented characters to ASCII (e.g., "ação" -> "acao"). Default: false.'
          type: boolean
          nullable: true
        phrase_matching:
          description: 'If true, support phrase matching. Default: false.'
          type: boolean
          nullable: true
        stopwords:
          description: Ignore this set of tokens. Can select from predefined languages and/or provide a custom set.
          anyOf:
          - $ref: '#/components/schemas/StopwordsInterface'
          - nullable: true
        on_disk:
          description: 'If true, store the index on disk. Default: false.'
          type: boolean
          nullable: true
        stemmer:
          description: 'Algorithm for stemming. Default: disabled.'
          anyOf:
          - $ref: '#/components/schemas/StemmingAlgorithm'
          - nullable: true
        enable_hnsw:
          description: 'Enable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.'
          type: boolean
          nullable: true
    TokenizerType:
      type: string
      enum:
      - prefix
      - whitespace
      - word
      - multilingual
    GeoIndexType:
      type: string
      enum:
      - geo
    DatetimeIndexParams:
      type: object
      required:
      - type
      properties:
        type:
          $ref: '#/components/schemas/DatetimeIndexType'
        is_principal:
          description: If true - use this key to organize storage of the collection data. This option assumes that this key will be used in majority of filtered requests.
          type: boolean
          nullable: true
        on_disk:
          description: 'If true, store the index on disk. Default: false.'
          type: boolean
          nullable: true
        enable_hnsw:
          description: 'Enable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.'
          type: boolean
          nullable: true
    Snowball:
      type: string
      enum:
      - snowball
    UuidIndexType:
      type: string
      enum:
      - uuid
    TextIndexType:
      type: string
      enum:
      - text
    Usage:
      description: Usage of the hardware resources, spent to process the request
      type: object
      properties:
        hardware:
          anyOf:
          - $ref: '#/components/schemas/HardwareUsage'
          - nullable: true
        inference:
          anyOf:
          - $ref: '#/components/schemas/InferenceUsage'
          - nullable: true
    DatetimeIndexType:
      type: string
      enum:
      - datetime
    ErrorResponse:
      type: object
      properties:
        time:
          type: number
          format: float
          description: Time spent to process this request
        status:
          type: object
          properties:
            error:
              type: string
              description: Description of the occurred error.
        result:
          type: object
          nullable: true
    BoolIndexParams:
      type: object
      required:
      - type
      properties:
        type:
          $ref: '#/components/schemas/BoolIndexType'
        on_disk:
          description: 'If true, store the index on disk. Default: false.'
          type: boolean
          nullable: true
        enable_hnsw:
          description: 'Enable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.'
          type: boolean
          nullable: true
    InferenceUsage:
      type: object
      required:
      - models
      properties:
        models:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/ModelUsage'
    KeywordIndexParams:
      type: object
      required:
      - type
      properties:
        type:
          $ref: '#/components/schemas/KeywordIndexType'
        is_tenant:
          description: 'If true - used for tenant optimization. Default: false.'
          type: boolean
          nullable: true
        on_disk:
          description: 'If true, store the index on disk. Default: false.'
          type: boolean
          nullable: true
        enable_hnsw:
          description: 'Enable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.'
          type: boolean
          nullable: true
    StopwordsSet:
      type: object
      properties:
        languages:
          description: Set of languages to use for stopwords. Multiple pre-defined lists of stopwords can be combined.
          type: array
          items:
            $ref: '#/components/schemas/Language'
          uniqueItems: true
          nullable: true
        custom:
          description: Custom stopwords set. Will be merged with the languages set.
          type: array
          items:
            type: string
          uniqueItems: true
          nullable: true
    SnowballLanguage:
      description: Languages supported by snowball stemmer.
      type: string
      enum:
      - arabic
      - armenian
      - danish
      - dutch
      - english
      - finnish
      - french
      - german
      - greek
      - hungarian
      - italian
      - norwegian
      - portuguese
      - romanian
      - russian
      - spanish
      - swedish
      - tamil
      - turkish
    IntegerIndexType:
      type: string
      enum:
      - integer
    CreateFieldIndex:
      type: object
      required:
      - field_name
      properties:
        field_name:
          type: string
        field_schema:
          anyOf:
          - $ref: '#/components/schemas/PayloadFieldSchema'
          - nullable: true
    IntegerIndexParams:
      type: object
      required:
      - type
      properties:
        type:
          $ref: '#/components/schemas/IntegerIndexType'
        lookup:
          description: If true - support direct lookups. Default is true.
          type: boolean
          nullable: true
        range:
          description: If true - support ranges filters. Default is true.
          type: boolean
          nullable: true
        is_principal:
          description: If true - use this key to organize storage of the collection data. This option assumes that this key will be used in majority of filtered requests. Default is false.
          type: boolean
          nullable: true
        on_disk:
          description: 'If true, store the index on disk. Default: false. Default is false.'
          type: boolean
          nullable: true
        enable_hnsw:
          description: 'Enable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.'
          type: boolean
          nullable: true
    WriteOrdering:
      description: 'Defines write ordering guarantees for collection operations


        * `weak` - write operations may be reordered, works faster, default


        * `medium` - write operations go through dynamically selected leader, may be inconsistent for a short period of time in case of leader change


        * `strong` - Write operations go through the permanent leader, consistent, but may be unavailable if leader is down'
      type: string
      enum:
      - weak
      - medium
      - strong
    UpdateStatus:
      description: '`Acknowledged` - Request is saved to WAL and will be process in a queue. `Completed` - Request is completed, changes are actual. `WaitTimeout` - Request is waiting for timeout.'
      type: string
      enum:
      - acknowledged
      - completed
      - wait_timeout
    PayloadFieldSchema:
      anyOf:
      - $ref: '#/components/schemas/PayloadSchemaType'
      - $ref: '#/components/schemas/PayloadSchemaParams'
    PayloadSchemaType:
      description: All possible names of payload types
      type: string
      enum:
      - keyword
      - integer
      - float
      - geo
      - text
      - bool
      - datetime
      - uuid
    UpdateResult:
      type: object
      required:
      - status
      properties:
        operation_id:
          description: Sequential number of the operation
          type: integer
          format: uint64
          minimum: 0
          nullable: true
        status:
          $ref: '#/components/schemas/UpdateStatus'
    StopwordsInterface:
      anyOf:
      - $ref: '#/components/schemas/Language'
      - $ref: '#/components/schemas/StopwordsSet'
    UuidIndexParams:
      type: object
      required:
      - type
      properties:
        type:
          $ref: '#/components/schemas/UuidIndexType'
        is_tenant:
          description: If true - used for tenant optimization.
          type: boolean
          nullable: true
        on_disk:
          description: 'If true, store the index on disk. Default: false.'
          type: boolean
          nullable: true
        enable_hnsw:
          description: 'Enable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.'
          type: boolean
          nullable: true
    ModelUsage:
      type: object
      required:
      - tokens
      properties:
        tokens:
          type: integer
          format: uint64
          minimum: 0
    FloatIndexParams:
      type: object
      required:
      - type
      properties:
        type:
          $ref: '#/components/schemas/FloatIndexType'
        is_principal:
          description: If true - use this key to organize storage of the collection data. This option assumes that this key will be used in majority of filtered requests.
          type: boolean
          nullable: true
        on_disk:
          description: 'If true, store the index on disk. Default: false.'
          type: boolean
          nullable: true
        enable_hnsw:
          description: 'Enable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.'
          type: boolean
          nullable: true
    GeoIndexParams:
      type: object
      required:
      - type
      properties:
        type:
          $ref: '#/components/schemas/GeoIndexType'
        on_disk:
          description: 'If true, store the index on disk. Default: false.'
          type: boolean
          nullable: true
        enable_hnsw:
          description: 'Enable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true.'
          type: boolean
          nullable: true
    BoolIndexType:
      type: string
      enum:
      - bool
    PayloadSchemaParams:
      description: Payload type with parameters
      anyOf:
      - $ref: '#/components/schemas/KeywordIndexParams'
      - $ref: '#/components/schemas/IntegerIndexParams'
      - $ref: '#/components/schemas/FloatIndexParams'
      - $ref: '#/components/schemas/GeoIndexParams'
      - $ref: '#/components/schemas/TextIndexParams'
      - $ref: '#/components/schemas/BoolIndexParams'
      - $ref: '#/components/schemas/DatetimeIndexParams'
      - $ref: '#/components/schemas/UuidIndexParams'
    Language:
      type: string
      enum:
      - arabic
      - azerbaijani
      - basque
      - bengali
      - catalan
      - chinese
      - danish
      - dutch
      - english
      - finnish
      - french
      - german
      - greek
      - hebrew
      - hinglish
      - hungarian
      - indonesian
      - italian
      - japanese
      - kazakh
      - nepali
      - norwegian
      - portuguese
      - romanian
      - russian
      - slovene
      - spanish
      - swedish
      - tajik
      - turkish
    SnowballParams:
      type: object
      required:
      - language
      - type
      properties:
        type:
          $ref: '#/components/schemas/Snowball'
        language:
          $ref: '#/components/schemas/SnowballLanguage'
    StemmingAlgorithm:
      description: Different stemming algorithms with their configs.
      anyOf:
      - $ref: '#/components/schemas/SnowballParams'
    FloatIndexType:
      type: string
      enum:
      - float
  securitySchemes:
    api-key:
      type: apiKey
      in: header
      name: api-key
      description: Authorization key, either read-write or read-only
    bearerAuth:
      type: http
      scheme: bearer
externalDocs:
  description: Find out more about Qdrant applications and demo
  url: https://qdrant.tech/documentation/