recherche

ChromaDB for the SQL Mind

Bonjour, Chroma DB est une base de données vectorielle utile pour travailler avec les applications GenAI. Dans cet article, j'explorerai comment exécuter des requêtes sur Chroma DB en examinant des relations similaires dans MySQL.

Schéma

Contrairement à SQL, vous ne pouvez pas définir votre propre schéma. Dans Chroma, vous obtenez des colonnes fixes, chacune avec son propre objectif :

import chromadb

#setiing up the client
client = chromadb.Client() 
collection = client.create_collection(name="name")

collection.add(
    documents = ["str1","str2","str3",...]
    ids = [1,2,3,....]
    metadatas=[{"chapter": "3", "verse": "16"},{"chapter":"3", "verse":"5"}, ..]           
    embeddings = [[1,2,3], [3,4,5], [5,6,7]]
)

Identifiants : ce sont des identifiants uniques. Notez que vous devez les fournir vous-même contrairement à SQL il n'y a pas d'incrémentation automatique
Documents : Il est utilisé pour insérer les données texte utilisées pour générer les intégrations. Vous pouvez fournir le texte et il créera automatiquement les intégrations. ou vous pouvez simplement fournir des intégrations directement et stocker le texte ailleurs.
Embeddings :Ils sont à mon avis la partie la plus importante de la base de données car ils sont utilisés pour effectuer des recherches de similarité.
Métadonnées : ceci est utilisé pour associer toutes les données supplémentaires que vous pourriez souhaiter ajouter à votre base de données pour tout contexte supplémentaire.

Maintenant que les bases d'une collection sont claires, passons aux opérations CRUD et nous verrons comment interroger la base de données.

Opérations CRUD

Remarque : les collections sont comme des tableaux dans Chroma

Pour créer une collection, nous pouvons utiliser create_collection() et effectuer nos opérations selon nos besoins, mais si la collection est déjà créée et que nous devons la référencer à nouveau, nous devons utiliser get_collection() sinon nous obtiendrons une erreur.

Create Table tablename 
#Create a collection
collection = client.create_collection(name="name")

#If a collection is already made and you need to use it again the use
collection = client.get_collection(name="name")
Insert into tablename
Values(... , ..., ...)
collection.add(
    ids = [1]
    documents = ["some text"]
    metadatas = [{"key":"value"}]
    embeddings = [[1,2,3]]
)

Pour mettre à jour les données insérées ou pour supprimer les données, nous pouvons utiliser les commandes suivantes

collection.update(
    ids = [2]
    documents = ["some text"]
    metadatas = [{"key":"value"}]
    embeddings = [[1,2,3]]            
)

# If the id does not exist update will do nothing. to add data if id does not exist use
collection.upsert(
    ids = [2]
    documents = ["some text"]
    metadatas = [{"key":"value"}]
    embeddings = [[1,2,3]]            
)

# To delete data use delete and refrence the document or id or the feild
collection.delete(
    documents = ["some text"]         
)

# Or you can delete from a bunch of ids using where that will apply filter on metadata
collection.delete(
    ids=["id1", "id2", "id3",...],
    where={"chapter": "20"}
)

Requêtes

Nous allons maintenant voir à quoi ressemblent certaines requêtes

Select * from tablename

Select * from tablename limit value

Select Documents, Metadata from tablename
collection.get()

collection.get(limit = val)

collection.get(include = ["documents","metadata"])

Bien que get() soit là pour récupérer un grand ensemble de tables pour des requêtes plus avancées, vous devez utiliser la méthode de requête

Select A,B from table
limit val
collection.query(
    n_results = val #limit
    includes = [A,B] 
)

Nous avons maintenant 3 façons possibles de filtrer les données : recherche de similarité (à quoi servent principalement les bases de données vectorielles), filtres de métadonnées et filtres de documents

Recherche de similarité

Nous pouvons effectuer une recherche basée sur du texte ou des intégrations et obtenir les résultats les plus similaires

collection.query(query_texts=["string"])

collection.query(query_embeddings=[[1,2,3]])

Dans ChromaDB, les paramètres Where et Where_document sont utilisés pour filtrer les résultats lors d'une requête. Ces filtres vous permettent d'affiner votre recherche de similarité en fonction de métadonnées ou du contenu spécifique d'un document.

Filtrer par métadonnées

Le paramètre Where vous permet de filtrer les documents en fonction de leurs métadonnées associées. Les métadonnées sont généralement un dictionnaire de paires clé-valeur que vous fournissez lors de l'insertion du document.

Filtrer les documents par métadonnées comme la catégorie, l'auteur ou la date.

import chromadb

#setiing up the client
client = chromadb.Client() 
collection = client.create_collection(name="name")

collection.add(
    documents = ["str1","str2","str3",...]
    ids = [1,2,3,....]
    metadatas=[{"chapter": "3", "verse": "16"},{"chapter":"3", "verse":"5"}, ..]           
    embeddings = [[1,2,3], [3,4,5], [5,6,7]]
)
Create Table tablename 

Filtrer par contenu de document

Le paramètrewhere_document permet un filtrage directement basé sur le contenu des documents.

Récupérez uniquement les documents contenant des mots-clés spécifiques.

#Create a collection
collection = client.create_collection(name="name")

#If a collection is already made and you need to use it again the use
collection = client.get_collection(name="name")

Notes clés :

  • Utilisez des opérateurs comme $contains, $startsWith ou $endsWith.
    • $contains : fait correspondre les documents contenant une sous-chaîne.
    • $startsWith : fait correspondre les documents commençant par une sous-chaîne.
    • $endsWith : fait correspondre les documents se terminant par une sous-chaîne.
  • Par exemple :

    Insert into tablename
    Values(... , ..., ...)
    

Cas d'utilisation courants :

Nous pouvons combiner les trois filtres comme ceci :

  1. Rechercher dans une catégorie spécifique :

    collection.add(
        ids = [1]
        documents = ["some text"]
        metadatas = [{"key":"value"}]
        embeddings = [[1,2,3]]
    )
    
  2. Rechercher des documents contenant un terme spécifique :

    collection.update(
        ids = [2]
        documents = ["some text"]
        metadatas = [{"key":"value"}]
        embeddings = [[1,2,3]]            
    )
    
    # If the id does not exist update will do nothing. to add data if id does not exist use
    collection.upsert(
        ids = [2]
        documents = ["some text"]
        metadatas = [{"key":"value"}]
        embeddings = [[1,2,3]]            
    )
    
    # To delete data use delete and refrence the document or id or the feild
    collection.delete(
        documents = ["some text"]         
    )
    
    # Or you can delete from a bunch of ids using where that will apply filter on metadata
    collection.delete(
        ids=["id1", "id2", "id3",...],
        where={"chapter": "20"}
    )
    
  3. Combinez les filtres de métadonnées et de contenu de document :

    Select * from tablename
    
    Select * from tablename limit value
    
    Select Documents, Metadata from tablename
    

Ces filtres améliorent la précision de vos recherches de similarité, faisant de ChromaDB un outil puissant pour la récupération ciblée de documents.

Conclusion

J'ai écrit cet article parce que je sentais que le document laissait beaucoup à désirer lorsque j'essayais de créer mon propre programme, j'espère que cela m'aidera !

Merci d'avoir lu si vous avez aimé l'article, aimez-le et partagez-le. De plus, si vous êtes nouveau dans l'architecture logicielle et que vous souhaitez en savoir plus, je démarre une cohorte de groupe où je travaillerai personnellement avec vous et un petit groupe pour vous apprendre tout sur les principes de l'architecture logicielle et de la conception. Vous pouvez remplir le formulaire ci-dessous si vous êtes intéressé. https://forms.gle/SUAxrzRyvbnV8uCGA

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Python: une plongée profonde dans la compilation et l'interprétationPython: une plongée profonde dans la compilation et l'interprétationMay 12, 2025 am 12:14 AM

Pythonusahybridmodelofcompilation et interprétation: 1) thepythoninterpreterCompileSourCodeIntOplatform-indépendantBytecode.2) thepythonvirtualmachine (pvm) there examenesthisbytecode, équilibrage de l'usage de la performance.

Python est-il une langue interprétée ou compilée, et pourquoi est-ce important?Python est-il une langue interprétée ou compilée, et pourquoi est-ce important?May 12, 2025 am 12:09 AM

Pythonisbothinterpretedand compiled.1) il est composédToByteCodeForportabilityAcrosplatforms.2) theytecodeisthenter interprété, permettant à OrdayNamictypingAndRapidDevelopment, bien que MaybeSlowerSlowerSwower, aisance.

Pour Loop vs While Loop in Python: les principales différences expliquéesPour Loop vs While Loop in Python: les principales différences expliquéesMay 12, 2025 am 12:08 AM

Forloopsareideal quand vous savez que l'immatriculation des adressages a une avance, tandis que ce qui est de savoir si

Pour et bien que les boucles: un guide pratiquePour et bien que les boucles: un guide pratiqueMay 12, 2025 am 12:07 AM

Forloopsaseesesed whenthenUmberoFitations dissownininadvance, tandis que celle-ci a été utilisé sur les éléments de la dispense

Python: Est-ce vraiment interprété? Démystifier les mythesPython: Est-ce vraiment interprété? Démystifier les mythesMay 12, 2025 am 12:05 AM

Pythonisnotpurelyinterpreted; itusahybridapproachofbytecocecompilation andruntimeinterpretation.1) pythoncompilessourcecodeintoBytecode, whichStHenexEcutedythepythonVirtualMachine (pvm) .2)

Python concaténate liste avec le même élémentPython concaténate liste avec le même élémentMay 11, 2025 am 12:08 AM

ToconcaténateListSinpythonWithTheSameElements, Utilisation: 1) L'opératorTokeEpDuplicate, 2) ASETTOREMOVEUPLICATION, OR3) ListComprehensionfor pour la réduction de la réduction de la manière dont les directives.

Interprété vs Langues compilées: Place de PythonInterprété vs Langues compilées: Place de PythonMay 11, 2025 am 12:07 AM

PythonisaninterpretedLanguage, offrant une volonté et une flexibilité de la fin

Pour et pendant que les boucles: quand utilisez-vous chacun dans Python?Pour et pendant que les boucles: quand utilisez-vous chacun dans Python?May 11, 2025 am 12:05 AM

UseforloopswhenthenUmberoFitationsknowninadvance, andwhileloopswHeniterationsDepenSonacondition.1) forloopsareidealforseenceslikelistsorranges.2) whileLoopsSuitscenarioswheretheloopContiesUnUesUsUlaspecificconditMetmecemet, utilesforUSERIRSURSoralgorititititititititititititititititittorititititititittorititititititititittorititititititititittoritititititititititititititititititittitititititititititititititititititittitititititititititititititititititittitititititititititititititititititittititititititititititititititititittititet

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
Nordhold: Système de fusion, expliqué
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

MantisBT

MantisBT

Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

SublimeText3 version anglaise

SublimeText3 version anglaise

Recommandé : version Win, prend en charge les invites de code !

MinGW - GNU minimaliste pour Windows

MinGW - GNU minimaliste pour Windows

Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

DVWA

DVWA

Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

Version crackée d'EditPlus en chinois

Version crackée d'EditPlus en chinois

Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code