API de recherche
IVGraph propose plusieurs modes de recherche reposant sur Elasticsearch : plein texte (BM25), autocomplétion, sémantique (vectorielle), hybride (BM25 + vectorielle) et par similarité.
Authentification : un JWT est requis pour tous les points de terminaison.
Prérequis : Elasticsearch doit être en cours d’exécution et l’espace de travail doit être indexé (l’indexation s’effectue automatiquement après la synchronisation).
Recherche plein texte
GET /api/search/
Recherchez des nœuds par titre et par contenu avec le classement BM25.
Paramètres :
| Paramètre | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| q | string | oui | — | Requête de recherche |
| connection_id | UUID | non | première connexion de l’utilisateur | Connexion spécifique dans laquelle effectuer la recherche |
| size | int | non | 50 | Nombre maximal de résultats |
| highlight | bool | non | true | Inclure les extraits avec surlignage |
| type | string | non | all | Filtre : page, database ou user |
Exemple :
curl -H "Authorization: Bearer <jwt_token>" \
"https://ivgraph.com/api/search/?q=project+planning&size=10"
import requests
resp = requests.get(
"https://ivgraph.com/api/search/",
headers={"Authorization": "Bearer <jwt_token>"},
params={"q": "project planning", "size": 10}
)
results = resp.json()["results"]
const resp = await fetch(
"https://ivgraph.com/api/search/?q=project+planning&size=10",
{ headers: { Authorization: "Bearer <jwt_token>" } }
);
const { results } = await resp.json();
Réponse :
{
"query": "project planning",
"total": 8,
"results": [
{
"id": "550e8400-e29b-41d4-a716-446655440001",
"type": "page",
"title": "Project Planning Guide",
"score": 12.5,
"highlight": "...comprehensive <em>project</em> <em>planning</em> methodology..."
}
]
}
Autocomplétion
GET /api/search/suggest/
Autocomplétion par préfixe pour une recherche au fil de la saisie.
Paramètres :
| Paramètre | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| q | string | oui | — | Préfixe (2 caractères minimum) |
| size | int | non | 10 | Nombre maximal de suggestions |
Exemple :
curl -H "Authorization: Bearer <jwt_token>" \
"https://ivgraph.com/api/search/suggest/?q=pro"
Réponse :
{
"prefix": "pro",
"suggestions": [
{"id": "uuid-1", "title": "Project Alpha", "type": "page"},
{"id": "uuid-2", "title": "Product Roadmap", "type": "page"},
{"id": "uuid-3", "title": "Projects Tracker", "type": "database"}
]
}
Recherche sémantique
GET /api/search/semantic/
Recherche par similarité vectorielle à l’aide de plongements vectoriels. Trouve des contenus similaires sur le plan conceptuel, au-delà des simples correspondances de mots-clés.
Paramètres :
| Paramètre | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| q | string | oui | — | Requête en langage naturel |
| connection_id | UUID | non | première connexion de l’utilisateur | Connexion dans laquelle effectuer la recherche |
| size | int | non | 10 | Nombre maximal de résultats |
Exemple :
curl -H "Authorization: Bearer <jwt_token>" \
"https://ivgraph.com/api/search/semantic/?q=how+do+we+handle+user+onboarding"
Réponse :
{
"query": "how do we handle user onboarding",
"total": 5,
"search_type": "semantic",
"results": [
{"id": "uuid-1", "type": "page", "title": "New User Welcome Flow", "score": 0.89},
{"id": "uuid-2", "type": "page", "title": "Onboarding Checklist", "score": 0.82}
]
}
Recherche hybride
GET /api/search/hybrid/
Combine la recherche par mots-clés BM25 et la recherche sémantique vectorielle pour tirer le meilleur des deux approches.
Paramètres : identiques à ceux de la recherche sémantique.
Exemple :
curl -H "Authorization: Bearer <jwt_token>" \
"https://ivgraph.com/api/search/hybrid/?q=authentication+flow"
Nœuds similaires
GET /api/search/similar/{node_id}/
Trouvez des nœuds similaires à un nœud donné à partir de plongements vectoriels.
Paramètres :
| Paramètre | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| node_id | UUID | oui | — | Identifiant du nœud source (dans le chemin de l’URL) |
| connection_id | UUID | non | première connexion de l’utilisateur | Connexion dans laquelle effectuer la recherche |
| size | int | non | 10 | Nombre maximal de résultats |
Exemple :
curl -H "Authorization: Bearer <jwt_token>" \
"https://ivgraph.com/api/search/similar/550e8400-e29b-41d4-a716-446655440001/"
Contenu d’une page
GET /api/search/content/{page_id}/
Récupérez le contenu d’une page au format Markdown et en texte brut.
Paramètres :
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
| page_id | UUID | oui | Identifiant de la page (dans le chemin de l’URL) |
Exemple :
curl -H "Authorization: Bearer <jwt_token>" \
"https://ivgraph.com/api/search/content/550e8400-e29b-41d4-a716-446655440001/"
Réponse :
{
"page_id": "550e8400-e29b-41d4-a716-446655440001",
"title": "Project Alpha",
"markdown": "# Project Alpha\n\nMain project page...",
"plain_text": "Project Alpha\nMain project page...",
"has_content": true
}
Gestion des index
POST /api/search/index/
Déclenchez la réindexation de l’index Elasticsearch pour la connexion de l’utilisateur.
curl -X POST -H "Authorization: Bearer <jwt_token>" \
"https://ivgraph.com/api/search/index/"
Réponse :
{"message": "Indexing complete", "index_name": "ivg_conn-uuid", "indexed_count": 342}
DELETE /api/search/index/
Supprimez l’index de recherche de la connexion de l’utilisateur.
curl -X DELETE -H "Authorization: Bearer <jwt_token>" \
"https://ivgraph.com/api/search/index/"
GET /api/search/connections/
Listez tous les index de recherche de l’utilisateur.
curl -H "Authorization: Bearer <jwt_token>" \
"https://ivgraph.com/api/search/connections/"
Réponse :
{
"user": "username",
"connections": [
{
"connection_id": "conn-uuid",
"schema_name": "airbyte_conn_uuid",
"index_name": "ivg_conn-uuid",
"document_count": 342,
"last_sync": "2026-04-10T10:00:00Z"
}
]
}
Erreurs
| Statut | Signification |
|---|---|
| 400 | Paramètres de requête manquants ou non valides |
| 401 | Non authentifié |
| 404 | Connexion ou page introuvable |
| 503 | Elasticsearch indisponible |