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.
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!
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
- Filtrering med metadata
- Hantera namnrymder
- Uppdateringar och borttagningar i realtid
- Hybridsökning med glesa och täta vektorer