Create page api-es authored by m431m's avatar m431m
---
title: API ElasticSearch
---
### Reverse Proxy vers l'API _Search_ ElasticSearch
```
/api/elastic/<alias(s)>/_search/
```
- `<alias(s)>` : Chaîne optionnelle composée d’un ou plusieurs alias séparés par des virgules (ex. : `main`, `pages`, `harvest`, `posts`)
- Les alias peuvent être préfixés par `-` pour exclusion, et peuvent inclure un `*` en fin pour matcher plusieurs index.
**Méthodes authorisés :** `GET`, `POST`
#### Description
Ce _end-point_ agit comme un proxy inversé sécurisé vers Elasticsearch, en filtrant dynamiquement les index/alias accessibles en fonction :
* des alias passés dans l’URL,
* du rôle de l’utilisateur (anonyme, groupe, superuser),
* de l’existence effective des index/alias.
L’URL est transformée côté backend pour interroger l’upstream Elasticsearch uniquement avec les alias autorisés.
### Exemple de requête
```bash
curl -X POST "https://example.org/api/elastic/main,harvest/_search/" \
-H "Authorization: Token abc123" \
-H "Content-Type: application/json" \
-d '{"query": {"match_all": {}}}'
```
#### Réponse
JSON natif retourné par Elasticsearch (structure `hits`, `aggregations`, etc.)
---
### Reverse Proxy vers l'API _Search_ Autocomplete_ ElasticSearch
```
/api/elastic/<alias(s)>/_search/autocomplete/?q=<foo>
```
- `<alias(s)>` : Identique à l’endpoint précédent, facultatif.
- `q` : Terme recherché pour l’autocomplétion.
**Méthode authorisée :** `GET`
#### Description
Ce _end-point_ interroge Elasticsearch via proxy pour effectuer une autocomplétion textuelle.
La requête est construite dynamiquement via un template JSON Jinja2, injectant le terme recherché (`q`) et la langue courante (`get_language()`).
#### Paramètres
| Nom | Type | Obligatoire | Description |
|-----|------|-------------|-------------|
| `q` | string | oui | Terme à autocompléter |
| `alias(s)` | string (dans URL) | non | Alias ciblés (ex : `main,pages`) |
#### Exemple de requête
```bash
curl "https://example.org/api/elastic/main/_search/autocomplete/?q=infra"
```
#### Réponse
```json
{
"results": [
"infrastructure",
"infrastructure ferroviaire",
"infrastructure routière"
]
}
```
#### Remarques
- Utilise les mêmes règles de filtrage que `elastic-proxy-main-view` pour déterminer les index autorisés.
- Les résultats sont extraits des champs `highlight` retournés par Elasticsearch.