Carga
Uma das características importantes do Qdrant é a capacidade de armazenar informações adicionais fora dos vetores (atributos de negócios de gerenciamento de armazenamento). Na terminologia do Qdrant, essas informações adicionais são referidas como "carga útil".
O Qdrant permite que você armazene qualquer informação que possa ser representada usando JSON.
Aqui está um exemplo de uma carga útil típica:
{
"name": "jaqueta",
"cor": ["vermelho", "azul"],
"quantidade": 10,
"preço": 11,99,
"localização": [
{
"longitude": 52.5200,
"latitude": 13.4050
}
],
"avaliações": [
{
"usuário": "Alice",
"pontuação": 4
},
{
"usuário": "Bob",
"pontuação": 5
}
]
}
Tipos de Carga
Além de armazenar cargas úteis, o Qdrant também permite que você pesquise com base em certos tipos de valores. Essa funcionalidade é implementada como filtros adicionais durante o processo de pesquisa e permite incorporar lógica personalizada em cima da similaridade semântica.
Durante o processo de filtragem, o Qdrant verificará as condições dos valores que atendem aos critérios de filtro. Se o tipo de valor armazenado não atender aos critérios de filtro, ele será considerado insatisfatório.
Por exemplo, aplicar condições de intervalo a dados de strings resultará em uma saída vazia.
No entanto, o tratamento de arrays (múltiplos valores do mesmo tipo) é ligeiramente diferente. Quando aplicamos filtros a um array, se pelo menos um valor no array atender à condição, o filtro será bem-sucedido.
Uma discussão detalhada do processo de filtragem é realizada na seção de filtragem.
Vamos dar uma olhada nos tipos de dados suportados pelo Qdrant:
Inteiro
inteiro
- inteiro de 64 bits, variando de -9223372036854775808
a 9223372036854775807
.
Exemplos de valores inteiro
únicos e múltiplos:
{
"quantidade": 10,
"tamanhos": [35, 36, 38]
}
Ponto Flutuante
ponto flutuante
- número de ponto flutuante de 64 bits.
Exemplos de valores ponto flutuante
únicos e múltiplos:
{
"preço": 11,99,
"classificação": [9,1, 9,2, 9,4]
}
Booleano
bool
- valor binário. Igual a verdadeiro
ou falso
.
Exemplos de valores bool
únicos e múltiplos:
{
"entregue": verdadeiro,
"respostas": [falso, falso, verdadeiro, falso]
}
Palavra-chave
palavra-chave
- valor de string.
Exemplos de valores palavra-chave
únicos e múltiplos:
{
"nome": "Alice",
"amigos": [
"Bob",
"Eva",
"Jack"
]
}
Coordenadas Geográficas
geo
é usado para representar coordenadas geográficas.
Exemplos de valores geo
únicos e múltiplos:
{
"localização": {
"longitude": 52.5200,
"latitude": 13.4050
},
"cidades": [
{
"longitude": 51.5072,
"latitude": 0.1276
},
{
"longitude": 40.7128,
"latitude": 74.0060
}
]
}
As coordenadas devem ser descritas como um objeto contendo dois campos: longitude
- representando longitude, latitude
- representando latitude.
Criando pontos com cargas úteis
API REST (arquitetura)
PUT /coleções/{nome_da_coleção}/pontos
{
"pontos": [
{
"id": 1,
"vetor": [0,05, 0,61, 0,76, 0,74],
"carga útil": {"cidade": "Berlim", "preço": 1,99}
},
{
"id": 2,
"vetor": [0,19, 0,81, 0,75, 0,11],
"carga útil": {"cidade": ["Berlim", "Londres"], "preço": 1,99}
},
{
"id": 3,
"vetor": [0,36, 0,55, 0,47, 0,94],
"carga útil": {"cidade": ["Berlim", "Moscou"], "preço": [1,99, 2,99]}
}
]
}
Definição de payloads
API REST (Esquema):
POST /coleções/{nome_da_coleção}/pontos/payload
{
"payload": {
"propriedade1": "string",
"propriedade2": "string"
},
"pontos": [
0, 3, 100
]
}
Exclusão de payloads
Este método remove as chaves de payload especificadas dos pontos especificados.
API REST (Esquema):
POST /coleções/{nome_da_coleção}/pontos/payload/delete
{
"chaves": ["cor", "preço"],
"pontos": [0, 3, 100]
}
Limpeza de payloads
Este método remove todas as chaves de payload dos pontos especificados.
API REST (Esquema):
POST /coleções/{nome_da_coleção}/pontos/payload/clear
{
"pontos": [0, 3, 100]
}
Você também pode usar
models.FilterSelector
para remover pontos que correspondam a condições de filtro especificadas, em vez de fornecer IDs.
Indexação de Payload
Para realizar buscas filtradas de forma eficiente, o Qdrant permite criar um índice para campos de payload, especificando o nome e o tipo do campo.
Campos indexados também impactam o índice vetorial.
Na prática, é recomendável criar índices em campos que provavelmente restringirão mais os resultados. Por exemplo, a indexação no ID do objeto será mais eficiente do que a indexação na cor, pois o ID do objeto é único para cada registro, enquanto a cor tem apenas alguns valores possíveis.
Em consultas compostas envolvendo vários campos, o Qdrant tentará usar o índice mais restritivo primeiro.
Para criar um índice para um campo, pode-se usar o seguinte:
API REST (Esquema)
PUT /coleções/{nome_da_coleção}/índice
{
"nome_do_campo": "nome do campo para indexar",
"esquema_do_campo": "keyword"
}
Os campos indexados são exibidos no esquema de payload juntamente com o API de informações da coleção.
Exemplo de esquema de payload:
{
"esquema_payload": {
"propriedade1": {
"tipo_de_dados": "keyword"
},
"propriedade2": {
"tipo_de_dados": "integer"
}
}
}