O DashVector é schema-free por design. Ao inserir, atualizar ou fazer upsert de um documento, passe quaisquer pares de chave-valor no parâmetro fields. Não é necessário definir um schema antecipadamente.
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
... ...
}
)
)Cada campo adicional consome memória e recursos de disco. Inclua apenas os campos que atendam às suas necessidades de filtragem ou recuperação.
Tipos de dados suportados
Os campos aceitam quatro tipos de dados Python:
| Tipo | Descrição | Restrições |
|---|---|---|
str | Valores de string | -- |
float | Números de ponto flutuante | -- |
int | Valores inteiros | Apenas inteiros com sinal de 32 bits: -2.147.483.648 a 2.147.483.647 |
bool | Valores booleanos | True ou False |
O tipo int do Python suporta precisão arbitrária, mas o DashVector aceita apenas inteiros com sinal de 32 bits (-2.147.483.648 a 2.147.483.647). Valores fora desse intervalo causam erros de overflow.
Filtrar por campos
Use pares de chave-valor de campos em expressões de filtro para restringir os resultados de pesquisa:
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)'
)Mais campos e expressões de filtro mais complexas aumentam o uso de CPU e a latência de consulta.
Quando predefinir um schema de campo
Embora o DashVector seja schema-free por padrão, predefinir um schema de campo ao criar uma coleção melhora o desempenho de consulta, reduz a sobrecarga de armazenamento e habilita a validação de entrada.
ret = client.create(
name='complex',
dimension=4,
fields_schema={'name': str, 'weight': float, 'age': int}
)Benefícios dos campos predefinidos
| Benefício | Descrição |
|---|---|
| Filtragem mais rápida | A filtragem condicional em campos predefinidos usa menos CPU e retorna resultados mais rápido do que filtrar em campos ad hoc. |
| Menor sobrecarga de armazenamento | Campos predefinidos armazenam apenas valores. Campos ad hoc armazenam chaves e valores, consumindo mais memória e espaço em disco. |
| Pré-validação de filtro | O DashVector valida a sintaxe do filtro em relação aos tipos de campo predefinidos e retorna um erro para incompatibilidades de tipo. Sem um schema, a validação de tipo não está disponível. |
Abordagem recomendada
Predefina os campos que aparecem na maioria dos documentos e nos quais você filtra com frequência. Use campos ad hoc no momento da inserção para atributos específicos de um subconjunto de documentos.