すべてのプロダクト
Search
ドキュメントセンター

DashVector:スキーマフリーの DashVector

最終更新日:Jan 08, 2025

DashVector はスキーマフリーとして設計されています。ドキュメントの挿入ドキュメントの更新ドキュメントのアップサートのために API を呼び出す際には、フィールドに任意のタイプのキーと値のペアを渡すことができます。次に例を示します。

collection.insert(
    Doc(
        id='1',
        vector=np.random.rand(4),
        fields={
            'name': 'zhangsan', 
            'weight':70.0, 
            'age':30, 
            'anykey1': 'anyvalue', 
            'anykey2': 1,
            'anykey3': True, 
            'anykey4': 3.1415926
            ... ...
        }
    )
)
説明

フィールドが多いほど、メモリやディスクなどのリソースを多く消費します。

サポートされているデータ型

フィールドの場合、DashVector は Python で次の基本データ型をサポートしています。

  • str

  • float

  • int

  • bool

重要

Python では、int 型は制限のないサイズの整数を表すことができます。ただし、DashVector は -2,147,483,648 ~ 2,147,483,647 の 32 ビット符号付き整数のみをサポートしています。したがって、データがオーバーフローしないようにする必要があります。

フィールドベースの検索

ドキュメントの挿入ドキュメントの更新、または ドキュメントのアップサートのための API で渡されたキーと値のペアをフィールドで使用して、ドキュメントを検索できます。次に例を示します。

ret = collection.query(
    vector=[0.1, 0.2, 0.3, 0.4],
    filter='(age > 18 and anykey2 = 1) or (name like "zhang%" and anykey3 = false)'
)
説明

検索中、フィールドが多いほど CPU リソースなどのリソースを多く消費し、複雑なフィルター式では結果を取得するための時間オーバーヘッドが大きくなります。

フィールドスキーマを事前に定義するメリット

コレクションの作成時に、フィールドスキーマを事前に定義できます。次に例を示します。

ret = client.create(
    name='complex', 
    dimension=4, 
    fields_schema={'name': str, 'weight': float, 'age': int}
)

フィールドスキーマを事前に定義すると、主に次の 3 つのメリットがあります。

  • 高速な検索: 事前に定義されたフィールドに基づく条件付きフィルタリングにより、時間オーバーヘッドと CPU オーバーヘッドが削減されます。

  • メモリとディスクの使用量の削減: フィールドが事前に定義されている場合は、値のみを格納する必要があります。そうでない場合は、キーと値の両方を格納する必要があるため、メモリとディスクのリソースを多く消費します。

  • フィルターの事前検証: フィールドが事前に定義されている場合、条件付きフィルタリング中にフィルターの構文が検証され、予期しないデータ型の入力値が検出されると、DashVector はすぐに失敗を返します。フィールドが事前に定義されていない場合、予期されるデータ型は不明であるため、事前検証を実行できません。

コレクションの作成時に、ほとんどのドキュメントに含まれる決定済みのフィールドを事前に定義し、ドキュメントを挿入する際に、少数のドキュメントに固有の不確定なフィールドを設定することをお勧めします。