Suivez ces étapes pour configurer et exécuter le projet :
Installer PostgreSQL
admin
.Configurer le projet
config
dans le répertoire du projet.db.js
et mettez à jour la ligne 3 :mayanksharma
par le nom d'utilisateur de votre système.Configurer la base de données
CREATE EXTENSION vector;
Installer Ollama
ollama pull snowflake-arctic-embed
Installer les dépendances du projet
npm install
node server.js
Installer l'extension client REST
Testez l'API
api.http
pour tester les points de terminaison de l'API. {
"query" : " your_search_query "
}
{
"title" : " magazine_title " ,
"author" : " author_name " ,
"category" : " magazine_category " ,
"content" : " magazine_content "
}
J'ai utilisé PostgreSQL avec pgvector (stockage des vecteurs d'intégration) et tsvector (stockage du texte de contenu).
Condition : recherche parmi 1 million d'enregistrements
Ajout d'index Hierarchical Navigable Small Worlds (HNSW) pour la recherche vectorielle sur les intégrations de contenu. Raison : La recherche nécessite un rappel élevé, ce qui rend hnsw meilleur que ivfflat.
Ajout d'index pour le titre, l'auteur et le contenu
Pagination ajoutée pour réduire les temps de chargement
Profil : Pic
Utilisateurs virtuels : 20
Durée de l'essai : 5 minutes
Accès au point final : POST /api/v1/magazine/hybridsearch/1 ("glasgow", "game", "business", "shubham", "food" et "modern")
Total des demandes envoyées : 10 915
Requête par seconde : 35,62
Temps de réponse moyen : 116 ms
Deux services individuels pour la recherche de texte et la recherche de vecteurs sont utilisés
Les intégrations sont générées par le modèle Meta Llama "snowflake-arctic-embed", étant léger.
ÉTAPE 1 : Les objets courants des résultats de recherche vectorielle et de texte intégral sont affichés en premier,
ÉTAPE 2 : suivi des objets issus uniquement de la recherche de texte,
ÉTAPE 3 : reste des objets issus de la recherche vectorielle.
requête : vecteur "glasgow", renvoie "Journal de fête celtique" dont le contenu est "l'Écosse"
requête : le vecteur "sablés", renvoie "Journal des fêtes celtiques" car "sablés" est lié à "écosse"
requête : mot-clé/texte intégral "shubham", renvoie "Physics Refresher" dont le nom d'auteur est "Shubham Thorve"
requête : mot-clé/texte intégral "mayank", renvoie "Digit Gaming" qui a le nom d'auteur "Mayank Khurana"
requête : mot clé/texte intégral "mois", renvoie "Dalal Street Journal" dont le contenu est "Tout sur les jeux vidéo ce mois-ci"
/model