Índice de campos escalares
En Milvus, un índice escalar se utiliza para acelerar el metafiltrado por un valor de campo no vectorial específico, de forma similar a un índice de base de datos tradicional. Esta guía le guiará a través de la creación y configuración de índices escalares para campos como enteros, cadenas, etc.
Tipos de indexación escalar
Indexación automática: Milvus decide automáticamente el tipo de índice basándose en el tipo de datos del campo escalar. Esto es adecuado cuando no necesita controlar el tipo de índice específico.
Indexación personalizada: Usted especifica el tipo de índice exacto, como un índice invertido o un índice de mapa de bits. Esto proporciona un mayor control sobre la selección del tipo de índice.
Indexación automática
Para utilizar la indexación automática, omita el parámetro tipo_índice en add_index()
para que Milvus pueda deducir el tipo de índice basándose en el tipo de campo escalar.
Para utilizar la indexación automática, omita el parámetro indexType en IndexParam
para que Milvus pueda deducir el tipo de índice basándose en el tipo de campo escalar.
Para utilizar la indexación automática, omita el parámetro index_type en createIndex()
para que Milvus pueda deducir el tipo de índice basándose en el tipo de campo escalar.
Para mapeos entre tipos de datos escalares y algoritmos de indexación por defecto, consulte Algoritmos de indexación de campos escalares.
# Auto indexing
client = MilvusClient(
uri="http://localhost:19530"
)
index_params = MilvusClient.prepare_index_params() # Prepare an empty IndexParams object, without having to specify any index parameters
index_params.add_index(
field_name="scalar_1", # Name of the scalar field to be indexed
index_type="", # Type of index to be created. For auto indexing, leave it empty or omit this parameter.
index_name="default_index" # Name of the index to be created
)
client.create_index(
collection_name="test_scalar_index", # Specify the collection name
index_params=index_params
)
import io.milvus.v2.common.IndexParam;
import io.milvus.v2.service.index.request.CreateIndexReq;
IndexParam indexParamForScalarField = IndexParam.builder()
.fieldName("scalar_1") // Name of the scalar field to be indexed
.indexName("default_index") // Name of the index to be created
.indexType("") // Type of index to be created. For auto indexing, leave it empty or omit this parameter.
.build();
List<IndexParam> indexParams = new ArrayList<>();
indexParams.add(indexParamForVectorField);
CreateIndexReq createIndexReq = CreateIndexReq.builder()
.collectionName("test_scalar_index") // Specify the collection name
.indexParams(indexParams)
.build();
client.createIndex(createIndexReq);
await client.createIndex({
collection_name: "test_scalar_index", // Specify the collection name
field_name: "scalar_1", // Name of the scalar field to be indexed
index_name: "default_index", // Name of the index to be created
index_type: "" // Type of index to be created. For auto indexing, leave it empty or omit this parameter.
})
Indexación personalizada
Para utilizar la indexación personalizada, especifique un tipo de índice concreto mediante el parámetro index_type en el archivo add_index()
.
Para utilizar la indexación personalizada, especifique un tipo de índice concreto utilizando el parámetro indexType en IndexParam
.
Para utilizar la indexación personalizada, especifique un tipo de índice concreto utilizando el parámetro index_type en createIndex()
.
El siguiente ejemplo crea un índice invertido para el campo escalar scalar_2
.
index_params = MilvusClient.prepare_index_params() # Prepare an IndexParams object
index_params.add_index(
field_name="scalar_2", # Name of the scalar field to be indexed
index_type="INVERTED", # Type of index to be created
index_name="inverted_index" # Name of the index to be created
)
client.create_index(
collection_name="test_scalar_index", # Specify the collection name
index_params=index_params
)
import io.milvus.v2.common.IndexParam;
import io.milvus.v2.service.index.request.CreateIndexReq;
IndexParam indexParamForScalarField = IndexParam.builder()
.fieldName("scalar_1") // Name of the scalar field to be indexed
.indexName("inverted_index") // Name of the index to be created
.indexType("INVERTED") // Type of index to be created
.build();
List<IndexParam> indexParams = new ArrayList<>();
indexParams.add(indexParamForVectorField);
CreateIndexReq createIndexReq = CreateIndexReq.builder()
.collectionName("test_scalar_index") // Specify the collection name
.indexParams(indexParams)
.build();
client.createIndex(createIndexReq);
await client.createIndex({
collection_name: "test_scalar_index", // Specify the collection name
field_name: "scalar_1", // Name of the scalar field to be indexed
index_name: "inverted_index", // Name of the index to be created
index_type: "INVERTED" // Type of index to be created
})
Métodos y parámetros
preparar_parametros_de_índice()
Prepara un objeto IndexParams.
add_index()
Añade configuraciones de índice al objeto IndexParams.
nombre_campo(cadena)
El nombre del campo escalar a indexar.
index_type(cadena):
El tipo del índice escalar a crear. Para la indexación implícita, déjelo vacío u omita este parámetro.
Para la indexación personalizada, los valores válidos son:
INVERTED: (Recomendado) Un índice invertido consiste en un diccionario de términos que contiene todas las palabras tokenizadas ordenadas alfabéticamente. Para más detalles, consulte Índice escalar.
STL_SORT: Ordena los campos escalares utilizando el algoritmo de ordenación estándar de la biblioteca de plantillas. Sólo admite campos numéricos (por ejemplo, INT8, INT16, INT32, INT64, FLOAT, DOUBLE).
Trie: Una estructura de datos en árbol para búsquedas y recuperaciones rápidas de prefijos. Admite campos VARCHAR.
nombre_índice(cadena)
Nombre del índice escalar que se va a crear. Cada campo escalar admite un índice.
crear_índice()
Crea el índice en la colección especificada.
nombre_colección(cadena)
Nombre de la colección para la que se crea el índice.
parámetros_índice
El objeto IndexParams que contiene las configuraciones del índice.
Métodos y parámetros
- IndexParamPrepara un objeto IndexParam.
- fieldName(Cadena) El nombre del campo escalar que se va a indexar.
- indexName(Cadena) El nombre del índice escalar a crear. Cada campo escalar admite un índice.
- indexType(Cadena) Tipo de índice escalar a crear. Para la indexación implícita, déjelo vacío u omita este parámetro. Para la indexación personalizada, los valores válidos son:
- INVERTED: (Recomendado) Un índice invertido consiste en un diccionario de términos que contiene todas las palabras tokenizadas ordenadas alfabéticamente. Para más detalles, consulte Índice escalar.
- STL_SORT: Ordena los campos escalares utilizando el algoritmo de ordenación estándar de la biblioteca de plantillas. Admite campos booleanos y numéricos (por ejemplo, INT8, INT16, INT32, INT64, FLOAT, DOUBLE).
- Trie: Una estructura de datos en árbol para búsquedas y recuperaciones rápidas de prefijos. Admite campos VARCHAR.
- CreateIndexReqCrea el índice en la colección especificada.
- collectionName(Cadena) El nombre de la colección para la que se crea el índice.
- indexParams(Lista
) Una lista de objetos IndexParam que contienen configuraciones de índices.
Métodos y parámetros
createIndex
Crea el índice en la colección especificada.
- nombre_colección(cadena) El nombre de la colección para la que se crea el índice.
- nombre_campo(cadena) El nombre del campo escalar que se va a indexar.
- nombre_índice(cadena) Nombre del índice escalar que se va a crear. Cada campo escalar admite un índice.
- tipo_índice(cadena) Tipo de índice escalar que se va a crear. Para la indexación implícita, déjelo vacío u omita este parámetro. Para la indexación personalizada, los valores válidos son:
- INVERTED: (Recomendado) Un índice invertido consiste en un diccionario de términos que contiene todas las palabras tokenizadas ordenadas alfabéticamente. Para más detalles, consulte Índice escalar.
- STL_SORT: Ordena los campos escalares utilizando el algoritmo de ordenación estándar de la biblioteca de plantillas. Admite campos booleanos y numéricos (por ejemplo, INT8, INT16, INT32, INT64, FLOAT, DOUBLE).
- Trie: Una estructura de datos en árbol para búsquedas y recuperaciones rápidas de prefijos. Admite campos VARCHAR.
Verificación del resultado
Utilice el método list_indexes()
para verificar la creación de índices escalares:
Utilice el método listIndexes()
para verificar la creación de índices escalares:
Utiliza el método listIndexes()
para verificar la creación de índices escalares:
client.list_indexes(
collection_name="test_scalar_index" # Specify the collection name
)
# Output:
# ['default_index','inverted_index']
import java.util.List;
import io.milvus.v2.service.index.request.ListIndexesReq;
ListIndexesReq listIndexesReq = ListIndexesReq.builder()
.collectionName("test_scalar_index") // Specify the collection name
.build();
List<String> indexNames = client.listIndexes(listIndexesReq);
System.out.println(indexNames);
// Output:
// [
// "default_index",
// "inverted_index"
// ]
res = await client.listIndexes({
collection_name: 'test_scalar_index'
})
console.log(res.indexes)
// Output:
// [
// "default_index",
// "inverted_index"
// ]
Límites
- Actualmente, la indexación escalar soporta los tipos de datos INT8, INT16, INT32, INT64, FLOAT, DOUBLE, BOOL, VARCHAR y ARRAY, pero no el tipo de datos JSON.