Vektordatabaser: Pinecone, Weaviate och pgvector · Lektion

Hantera namnrymder

Förstå hur ni kan dela upp data i ett enda Pinecone-index med hjälp av namnrymder för bättre struktur.

Lektion 2 av 412 steg

Hantera namnrymder är en gratis lektion i Vektordatabaser: Pinecone, Weaviate och pgvector på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Vektordatabaser: Pinecone, Weaviate och pgvector, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Vektordatabaser: Pinecone, Weaviate och pgvector innehåller totalt 4 lektioner.

Vad är Pinecone-namespaces?

Välkommen till hantering av namespaces i Pinecone! Ett namespace är ungefär som en logisk partition i ett och samma Pinecone-index.

Tänk på det som en mapp i en huvudkatalog. Det låter dig dela upp dina data utan att behöva skapa helt separata index.

Varför använda namespaces?

Namespaces är mycket användbara för att organisera dina vektordata, särskilt i komplexa applikationer:

  • Multi-tenancy: Isolera data för olika användare eller kunder i ett enda index.
  • A/B-testning: Lagra olika versioner av embeddings för experiment.
  • Dataisolering: Håll separata datamängder åtskilda samtidigt som du använder samma indexinfrastruktur.
  • Kategorisering: Gruppera vektorer efter ämne, källa eller typ.

Det förvalda namespacet

Varje Pinecone-index har ett förvalt namespace. Om du inte uttryckligen anger ett namespace när du gör en upsert eller fråga, arbetar operationerna mot detta förvalda namespace.

Det representeras ofta av en tom sträng "" eller genom att namespace-parametern helt enkelt utelämnas.

Förbereda namespaces

Innan vi arbetar med namespaces måste du se till att din Pinecone-klient är initierad. Vi utgår från att du har konfigurerat din API-nyckel och miljö, vanligtvis via miljövariabler.

Här är en grundläggande konfiguration som demonstration:

from pinecone import Pinecone
import os

def main():
    # Replace with your actual API key and environment from environment variables
    api_key = os.environ.get("PINECONE_API_KEY", "YOUR_API_KEY")
    environment = os.environ.get("PINECONE_ENVIRONMENT", "YOUR_ENVIRONMENT")

    if api_key == "YOUR_API_KEY" or environment == "YOUR_ENVIRONMENT":
        print("Please set PINECONE_API_KEY and PINECONE_ENVIRONMENT env vars.")
        return

    pc = Pinecone(api_key=api_key, environment=environment)
    print("Pinecone client initialized.")

if __name__ == "__main__":
    main()

Göra en upsert av data i ett namespace

Om du vill lägga till vektorer i ett specifikt namespace inkluderar du helt enkelt parametern namespace i ditt anrop till index.upsert().

I det här exemplet görs en upsert av några vektorer till ett namespace med namnet "product-recommendations".

from pinecone import Pinecone, Index
import os

def main():
    api_key = os.environ.get("PINECONE_API_KEY", "YOUR_API_KEY")
    environment = os.environ.get("PINECONE_ENVIRONMENT", "YOUR_ENVIRONMENT")

    if api_key == "YOUR_API_KEY" or environment == "YOUR_ENVIRONMENT":
        print("Please set PINECONE_API_KEY and PINECONE_ENVIRONMENT env vars.")
        return

    pc = Pinecone(api_key=api_key, environment=environment)
    index_name = "my-product-index" # Ensure this index exists

    if index_name not in pc.list_indexes():
        print(f"Index '{index_name}' does not exist. Please create it first.")
        return

    index = pc.Index(index_name)

    vectors_to_upsert = [
        {"id": "item-1", "values": [0.1, 0.2, 0.3]}, # 3 dimensions for example
        {"id": "item-2", "values": [0.4, 0.5, 0.6]}
    ]

    # Upsert into a specific namespace
    index.upsert(vectors=vectors_to_upsert, namespace="product-recommendations")
    print("Vectors upserted into 'product-recommendations' namespace.")

if __name__ == "__main__":
    main()

Fråga ett specifikt namespace

När du vill hämta vektorer från ett visst namespace anger du också parametern namespace i ditt anrop till index.query().

Det säkerställer att sökningen begränsas till den delen av indexet.

from pinecone import Pinecone, Index
import os

def main():
    api_key = os.environ.get("PINECONE_API_KEY", "YOUR_API_KEY")
    environment = os.environ.get("PINECONE_ENVIRONMENT", "YOUR_ENVIRONMENT")

    if api_key == "YOUR_API_KEY" or environment == "YOUR_ENVIRONMENT":
        print("Please set PINECONE_API_KEY and PINECONE_ENVIRONMENT env vars.")
        return

    pc = Pinecone(api_key=api_key, environment=environment)
    index_name = "my-product-index"

    if index_name not in pc.list_indexes():
        print(f"Index '{index_name}' does not exist. Please create it first.")
        return

    index = pc.Index(index_name)

    query_vector = [0.15, 0.25, 0.35] # Example query vector

    # Query within the 'product-recommendations' namespace
    results = index.query(
        vector=query_vector,
        top_k=2,
        namespace="product-recommendations",
        include_values=False
    )
    print("Query results from 'product-recommendations' namespace:")
    for match in results.matches:
        print(f"ID: {match.id}, Score: {match.score}")

if __name__ == "__main__":
    main()

Förstå frågors räckvidd

Det är viktigt att komma ihåg att frågor i Pinecone som standard är specifika för ett namespace. Om du gör en fråga utan att ange ett namespace söker den endast i det förvalda namespacet.

Det finns inget direkt sätt att söka i alla namespaces med ett enda API-anrop. Om du vill kombinera resultat måste du fråga varje namespace separat.

Lista namespaces i ett index

Om du vill se vilka namespaces som finns i ditt index och deras statistik kan du använda metoden index.describe_index_stats().

Den returnerar en sammanfattning som bland annat innehåller en karta över namespaces och antalet vektorer i dem.

from pinecone import Pinecone, Index
import os

def main():
    api_key = os.environ.get("PINECONE_API_KEY", "YOUR_API_KEY")
    environment = os.environ.get("PINECONE_ENVIRONMENT", "YOUR_ENVIRONMENT")

    if api_key == "YOUR_API_KEY" or environment == "YOUR_ENVIRONMENT":
        print("Please set PINECONE_API_KEY and PINECONE_ENVIRONMENT env vars.")
        return

    pc = Pinecone(api_key=api_key, environment=environment)
    index_name = "my-product-index"

    if index_name not in pc.list_indexes():
        print(f"Index '{index_name}' does not exist. Please create it first.")
        return

    index = pc.Index(index_name)

    # Get index statistics
    index_stats = index.describe_index_stats()

    print("Namespaces in index:")
    for ns, stats in index_stats.namespaces.items():
        print(f"- Namespace: '{ns}', Vector Count: {stats.vector_count}")

if __name__ == "__main__":
    main()

Ta bort vektorer från ett namespace

Du kan ta bort specifika vektorer från ett namespace genom att ange deras ID:n tillsammans med parametern namespace i index.delete().

I det här exemplet tas ett specifikt objekt bort från namespacet "product-recommendations".

from pinecone import Pinecone, Index
import os

def main():
    api_key = os.environ.get("PINECONE_API_KEY", "YOUR_API_KEY")
    environment = os.environ.get("PINECONE_ENVIRONMENT", "YOUR_ENVIRONMENT")

    if api_key == "YOUR_API_KEY" or environment == "YOUR_ENVIRONMENT":
        print("Please set PINECONE_API_KEY and PINECONE_ENVIRONMENT env vars.")
        return

    pc = Pinecone(api_key=api_key, environment=environment)
    index_name = "my-product-index"

    if index_name not in pc.list_indexes():
        print(f"Index '{index_name}' does not exist. Please create it first.")
        return

    index = pc.Index(index_name)

    # Delete a specific vector by ID within a namespace
    index.delete(ids=["item-1"], namespace="product-recommendations")
    print("Vector 'item-1' deleted from 'product-recommendations' namespace.")

if __name__ == "__main__":
    main()

Ta bort ett helt namespace

Om du vill ta bort alla vektorer i ett specifikt namespace, vilket i praktiken tar bort själva namespacet, kan du använda index.delete() med parametern namespace och ange delete_all=True.

Var försiktig: Åtgärden kan inte ångras och tar bort alla data i namespacet!

from pinecone import Pinecone, Index
import os

def main():
    api_key = os.environ.get("PINECONE_API_KEY", "YOUR_API_KEY")
    environment = os.environ.get("PINECONE_ENVIRONMENT", "YOUR_ENVIRONMENT")

    if api_key == "YOUR_API_KEY" or environment == "YOUR_ENVIRONMENT":
        print("Please set PINECONE_API_KEY and PINECONE_ENVIRONMENT env vars.")
        return

    pc = Pinecone(api_key=api_key, environment=environment)
    index_name = "my-product-index"

    if index_name not in pc.list_indexes():
        print(f"Index '{index_name}' does not exist. Please create it first.")
        return

    index = pc.Index(index_name)

    # Delete all vectors within a specific namespace
    # This effectively removes the 'test-namespace' and all its contents
    index.delete(namespace="test-namespace", delete_all=True)
    print("All vectors in 'test-namespace' deleted. Namespace effectively removed.")

if __name__ == "__main__":
    main()

Kunskapskontroll om namespaces

Du har ett index med namnet "my-app-index". Du gör en upsert av vektorer i namespacen "user-1" och "user-2". Vad händer om du sedan anropar index.query(vector=my_vec, top_k=5) utan att ange ett namespace?

Sammanfattning: Organisera med namespaces

Bra jobbat! Du har lärt dig hur kraftfulla Pinecones namespaces är.

  • Namespaces hjälper dig att dela upp data i ett enda index.
  • De passar perfekt för multi-tenancy och A/B-testning.
  • Operationer (upsert, query, delete) är specifika för ett namespace.
  • Det förvalda namespacet används om inget annat anges.
  • Du kan lista befintliga namespaces och ta bort hela namespaces.

Genom att använda namespaces effektivt håller du dina vektordata organiserade och lätthanterliga!

Gratis att börja

Lär dig Vektordatabaser: Pinecone, Weaviate och pgvector med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
12
Lektioner
48

Vanliga frågor

Är lektionen ”Hantera namnrymder” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Vektordatabaser: Pinecone, Weaviate och pgvector, inklusive ”Hantera namnrymder”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Vektordatabaser: Pinecone, Weaviate och pgvector innehåller totalt 4 lektioner.

Vad lär jag mig i ”Hantera namnrymder”?

Förstå hur ni kan dela upp data i ett enda Pinecone-index med hjälp av namnrymder för bättre struktur. Ni övar på Vektordatabaser: Pinecone, Weaviate och pgvector med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Vektordatabaser: Pinecone, Weaviate och pgvector?

Du behöver inga förkunskaper. Utbildningen i Vektordatabaser: Pinecone, Weaviate och pgvector på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Hantera namnrymder”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Vektordatabaser: Pinecone, Weaviate och pgvector-lektionen?

Ja. Varje Vektordatabaser: Pinecone, Weaviate och pgvector-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Filtrering med metadata
  2. Hantera namnrymder
  3. Uppdateringar och borttagningar i realtid
  4. Hybridsökning med glesa och täta vektorer
← Tillbaka till Vektordatabaser: Pinecone, Weaviate och pgvector