この章では、Qdrantベクトルデータベースのクイックスタートと、RESTful APIに基づいたベクトルデータベースの操作方法について紹介します。

Qdrantのインストール

注意: このチュートリアルはDockerを使用してQdrantデータベースをインストールすることを前提としています。進む前にDockerをインストールしてください。

Qdrantイメージをダウンロードします

docker pull qdrant/qdrant

Qdrantベクトルデータベースサービスを起動します

docker run -p 6333:6333 \
    -v $(pwd)/qdrant_storage:/qdrant/storage:z \
    qdrant/qdrant

デフォルトでは、ローカルファイルディレクトリをコンテナにマッピングし、すべてのデータは./qdrant_storageディレクトリに保存されます。

これでlocalhost:6333を介してQdrantにアクセスできます。

Qdrantベクトルデータベースは、データベース操作のためのRESTful APIおよびPython、Goなどのプログラミング言語向けのSDKをサポートしています。このチュートリアルでは主にRESTful APIの使用方法に焦点を当てて説明します。

APIへのアクセスの例

curl -X PUT 'http://localhost:6333/collections/test_collection' \
  -H 'Content-Type: application/json' \
  --data-raw '{
    "vectors": {
      "size": 4,
      "distance": "Dot"
    }
  }'

Qdrant Web UI

http://localhost:6333/dashboardのアドレスを介してWeb UIにアクセスできます

Qdrant web ui

コレクションの作成

Qdrantベクトルデータベースのコレクションの概念は、MYSQLのテーブル構造に比較でき、同じタイプのベクトルデータを均一に保存するために使用されます。コレクションに保存される各データは、Qdrantでポイントと呼ばれ、数学的幾何学空間におけるポイントに類似し、ベクトルの表現を表します(ただし、単なるデータとして扱います)。

PUT /collections/{collection_name}

{
    "vectors": {
      "size": 300,
      "distance": "Cosine"
    }
}

パラメータの説明:

パラメータ 説明
collection_name コレクション名(必須)
vectors ベクトルパラメータの定義(必須)
vectors.size ベクトルサイズ(またはベクトルの次元)を表します
vectors.distance ベクトルの類似性アルゴリズムを表し、主に「Cosine」、「Euclid」、「Dot」の3つのアルゴリズムを含みます

ベクトルの追加(ポイント)

コレクションを作成した後、そのコレクションにベクトルデータを追加できます。Qdrantでは、ベクトルデータはポイントを使用して表され、各ポイントデータにはid、ペイロード(関連するデータ)、ベクトルデータの3つの部分が含まれます。

PUT /collections/{collection_name}/points

{
    "points": [
        {
            "id": "5c56c793-69f3-4fbf-87e6-c4bf54c28c26", // id
            "payload": {"color": "red"}, // 関連属性データ, 通常は関連するビジネス属性 (例: 注文ID、製品ID、タイトルなど)
            "vector": [0.9, 0.1, 0.1] // 現在のビジネスデータの特徴を表すベクトルデータ
        }
    ]
}

ベクトル検索

ベクトルデータを追加した後、ベクトルを使用して意味の類似検索を実行できます。

// collection_name - コレクション名
POST /collections/{collection_name}/points/search

{
    "vector": [0.2, 0.1, 0.9, 0.7], // ベクトルパラメータ
    "limit": 3 // 最も類似度の高いデータ3件を返します
}

パラメータの説明:

  • vector: このベクトルに類似したコンテンツを検索するためのベクトルパラメータ。たとえば: ユーザーが検索するキーワードをベクトルに変換し、ユーザー入力に関連するコンテンツを検索することができます。

属性フィルタリング

データを検索する際、ベクトルを使用した類似検索に加えて、時にはSQLのWHERE句に類似した属性フィルタリングを実行したいこともあります。Qdrantは、ポイントペイロードに関連付けられた属性をフィルタリングするためのフィルタークエリをサポートしています。

// collection_name - コレクション名
POST /collections/{collection_name}/points/search

{
    "filter": { // ペイロードの関連属性をフィルタリングするために主に使用され、全体の構文形式はElasticsearchの構文に類似しています。このパラメータはオプションです。
        "must": [ // color=redとなるポイントデータをフィルタリング
            {
                "key": "color",
                "match": {
                    "value": "red"
                }
            }
        ]
    },
    "vector": [0.2, 0.1, 0.9, 0.7], // ベクトルパラメータ
    "limit": 3
}

詳細なチュートリアルについては、以下の章を参照してください。