条件付きクエリの実行

このトピックでは、SQLのWHERE条件に類似した条件付きクエリの実行方法を紹介します。

ベクトル類似検索とは異なり、クエリはブール式を使用してスカラーフィルタリングに基づいてベクトルを取得します。Milvusはスカラーフィールドでさまざまなデータ型とブール式をサポートしています。ブール式はスカラーフィールドまたはプライマリキーフィールドをフィルタリングし、フィルタ条件に一致するすべての結果を取得します。

次の例は、2000行の書籍ID(プライマリキー)、単語カウント(スカラーフィールド)、および書籍紹介(ベクトルフィールド)を含むデータセットでクエリを実行する方法を示しています。それは特定の書籍をIDに基づいて模擬的にクエリするものです。

コレクションの読み込み

Milvusでは、すべての検索およびクエリ操作はメモリ内で実行されます。クエリを実行する前に、コレクションをメモリにロードする必要があります。

err := milvusClient.LoadCollection(
  context.Background(),   // ctx
  "book",                 // コレクション名
  false                   // 非同期
)
if err != nil {
  log.Fatal("コレクションの読み込みに失敗しました:", err.Error())
}

クエリの実行

次の例は、特定の book_id 値に基づいてベクトルをフィルタリングし、結果の book_idbook_intro フィールドを返します。

Milvusはクエリの一貫性レベルの設定をサポートしています。この例では、一貫性レベルを Strong に設定しています。また、一貫性レベルを BoundedSession、または Eventually に設定することもできます。Milvusの四つの一貫性レベルについての詳細については、一貫性 を参照してください。

また、クエリリクエストでフィルタ式と出力フィールドを動的に使用することもできます。たとえば、動的パターンを参照してください。

opt := client.SearchQueryOptionFunc(func(option *client.SearchQueryOption) {
    option.Limit = 3
    option.Offset = 0
    option.ConsistencyLevel = entity.ClStrong
    option.IgnoreGrowing = false
})

queryResult, err := milvusClient.Query(
    context.Background(),                                   // ctx
    "book",                                                 // CollectionName
    "",                                                     // PartitionName
    entity.NewColumnInt64("book_id", []int64{2,4,6,8}),     // expr
    []string{"book_id", "book_intro"},                      // OutputFields
    opt,                                                    // queryOptions
)
if err != nil {
    log.Fatal("コレクションのクエリに失敗しました:", err.Error())
}
パラメータ 説明 オプション
ctx APIコールプロセスを制御するために使用されるコンテキスト。 N/A
CollectionName クエリ対象のコレクション名。 N/A
partitionName ロードされるパーティションの名前。空の場合、すべてのパーティションをクエリします。 N/A
expr 属性をフィルタリングするために使用されるブール式。 詳細については、ブール式ルールを参照してください。
OutputFields 返されるフィールド名。 現在のバージョンではベクトルフィールドはサポートされていません。
opts entity.SearchQueryOptionFunc 形式で表されるクエリオプション。 - Limit は返されるエンティティの数を示します。 - Offset は検索プロセス中にスキップするエンティティ数を示します。このパラメータと Limit の合計は 16384 より小さい必要があります。 - ConsistencyLevel は検索プロセス中に適用される一貫性レベルを示します。 - Ignore Growing は類似検索プロセス中に成長セグメントを無視するかどうかを示します。デフォルト値は False で、類似検索に成長セグメントが関与します。

返された結果を確認します。

fmt.Printf("%#v\n", queryResult)
for _, qr := range queryResult {
    fmt.Println(qr.IDs)
}

エンティティ数の計算

クエリを実行する際、output_fieldscount(*) を追加することで、Milvusはコレクション内のエンティティの量を返すことができます。特定の条件を満たすエンティティの数量を数えたい場合は、expr を使用してブール式を定義します。

制限事項

output_fieldscount(*) を使用する場合、limit パラメータの使用は許可されていません。