Skalare Felder indizieren
In Milvus wird ein skalarer Index verwendet, um die Metafilterung nach einem bestimmten Nicht-Vektor-Feldwert zu beschleunigen, ähnlich wie bei einem traditionellen Datenbankindex. Diese Anleitung führt Sie durch das Erstellen und Konfigurieren von skalaren Indizes für Felder wie Ganzzahlen, Strings usw.
Arten der skalaren Indizierung
Automatische Indizierung: Milvus entscheidet automatisch über den Indextyp, basierend auf dem Datentyp des skalaren Feldes. Dies ist geeignet, wenn Sie den spezifischen Indextyp nicht kontrollieren müssen.
Benutzerdefinierte Indizierung: Sie geben den genauen Indextyp an, z. B. einen invertierten Index oder einen Bitmap-Index. Damit haben Sie mehr Kontrolle über die Auswahl des Indextyps.
Automatische Indizierung
Um die automatische Indizierung zu verwenden, lassen Sie den Parameter index_type in add_index()
weg, so dass Milvus den Indextyp auf der Grundlage des skalaren Feldtyps ableiten kann.
Um die automatische Indizierung zu verwenden, lassen Sie den indexType-Parameter in IndexParam
weg, so dass Milvus den Indextyp auf der Grundlage des Skalarfeldtyps ableiten kann.
Um die automatische Indizierung zu verwenden, lassen Sie den Parameter index_type in createIndex()
weg, so dass Milvus den Indextyp auf der Grundlage des skalaren Feldtyps ableiten kann.
Für Zuordnungen zwischen skalaren Datentypen und Standard-Indizierungsalgorithmen, siehe Skalarfeld-Indizierungsalgorithmen.
# 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.
})
Benutzerdefinierte Indizierung
Um benutzerdefinierte Indizierung zu verwenden, geben Sie einen bestimmten Indextyp mit dem index_type Parameter in add_index()
.
Um benutzerdefinierte Indizierung zu verwenden, geben Sie einen bestimmten Indextyp mit dem indexType-Parameter in IndexParam
.
Um die benutzerdefinierte Indizierung zu verwenden, geben Sie einen bestimmten Indextyp unter Verwendung des index_type-Parameters in createIndex()
.
Das folgende Beispiel erstellt einen invertierten Index für das Skalarfeld 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
})
Methoden und Parameter
prepare_index_params()
Bereitet ein IndexParams-Objekt vor.
add_index()
Fügt Index-Konfigurationen zum IndexParams-Objekt hinzu.
field_name(String)
Der Name des zu indizierenden Skalarfeldes.
index_type(String):
Der Typ des zu erstellenden skalaren Indexes. Bei impliziter Indizierung lassen Sie diesen Parameter leer oder lassen ihn weg.
Für die benutzerdefinierte Indizierung sind folgende Werte gültig:
INVERTED: (empfohlen) Ein invertierter Index besteht aus einem Begriffswörterbuch, das alle tokenisierten Wörter in alphabetischer Reihenfolge enthält. Einzelheiten finden Sie unter Skalarer Index.
STL_SORT: Sortiert skalare Felder mit dem Standard-Sortieralgorithmus der Vorlagenbibliothek. Unterstützt nur numerische Felder (z. B. INT8, INT16, INT32, INT64, FLOAT, DOUBLE).
Trie: Eine Baumdatenstruktur für schnelle Präfix-Suchen und -Abrufe. Unterstützt VARCHAR-Felder.
index_name(Zeichenkette)
Der Name des zu erstellenden skalaren Indexes. Jedes skalare Feld unterstützt einen Index.
create_index()
Erzeugt den Index in der angegebenen Sammlung.
collection_name(string)
Der Name der Sammlung, für die der Index erstellt wird.
index_params
Das IndexParams-Objekt, das Indexkonfigurationen enthält.
Methoden und Parameter
- IndexParamBereitet ein IndexParam-Objekt vor.
- fieldName(String) Der Name des skalaren Feldes, das indiziert werden soll.
- indexName(String) Der Name des zu erstellenden skalaren Indexes. Jedes Skalarfeld unterstützt einen Index.
- indexType(String) Der Typ des zu erstellenden skalaren Indexes. Für implizite Indizierung lassen Sie diesen Parameter leer oder lassen ihn weg. Für benutzerdefinierte Indizierung sind folgende Werte gültig:
- INVERTED: (Empfohlen) Ein invertierter Index besteht aus einem Begriffswörterbuch, das alle tokenisierten Wörter in alphabetischer Reihenfolge enthält. Einzelheiten finden Sie unter Skalarer Index.
- STL_SORT: Sortiert skalare Felder mit dem Standard-Sortieralgorithmus der Vorlagenbibliothek. Unterstützt boolesche und numerische Felder (z. B. INT8, INT16, INT32, INT64, FLOAT, DOUBLE).
- Trie: Eine Baumdatenstruktur für schnelle Präfix-Suchen und -Abrufe. Unterstützt VARCHAR-Felder.
- CreateIndexReqErzeugt den Index in der angegebenen Sammlung.
- collectionName(String) Der Name der Sammlung, für die der Index erstellt wird.
- indexParams(Liste
) Eine Liste von IndexParam-Objekten, die Indexkonfigurationen enthalten.
Methoden und Parameter
createIndex
Erzeugt den Index in der angegebenen Sammlung.
- collection_name(string) Der Name der Sammlung, für die der Index erstellt wird.
- field_name(string) Der Name des skalaren Feldes, das indiziert werden soll.
- index_name(string) Der Name des zu erstellenden skalaren Indexes. Jedes Skalarfeld unterstützt einen Index.
- index_type(string) Der Typ des zu erstellenden skalaren Indexes. Für implizite Indizierung lassen Sie diesen Parameter leer oder lassen ihn weg. Für benutzerdefinierte Indizierung sind folgende Werte gültig:
- INVERTED: (empfohlen) Ein invertierter Index besteht aus einem Begriffswörterbuch, das alle tokenisierten Wörter in alphabetischer Reihenfolge enthält. Einzelheiten finden Sie unter Skalarer Index.
- STL_SORT: Sortiert skalare Felder mit dem Standard-Sortieralgorithmus der Vorlagenbibliothek. Unterstützt boolesche und numerische Felder (z. B. INT8, INT16, INT32, INT64, FLOAT, DOUBLE).
- Trie: Eine Baumdatenstruktur für schnelle Präfix-Suchen und -Abrufe. Unterstützt VARCHAR-Felder.
Überprüfen des Ergebnisses
Verwenden Sie die list_indexes()
Methode, um die Erstellung von skalaren Indizes zu überprüfen:
Verwenden Sie die Methode listIndexes()
, um die Erstellung von skalaren Indizes zu überprüfen:
Verwenden Sie die Methode listIndexes()
, um die Erstellung skalarer Indizes zu überprüfen:
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"
// ]
Begrenzungen
- Derzeit unterstützt die skalare Indizierung die Datentypen INT8, INT16, INT32, INT64, FLOAT, DOUBLE, BOOL, VARCHAR und ARRAY, aber nicht den Datentyp JSON.