# Servicios del motor de resultados


## Búsqueda

```
Método: POST
Authorization (header): Token del motor

https://search.api.induxsoft.net/{seid}/?query-field=reformulated_question&filters=params&result=answer&model=fast&limit=10
{
	//Carga útil
}
```

- seid. (Search Engine Id) es el identificador del motor de resultados (`requerido`).


**Parámetros de la URL**

- query-field. Es el nombre del campo de la carga útil que contiene la consulta (requerido - `default = reformulated_question`)
- filters. Es el nombre del campo de la carga útil que contiene los parámetros de filtro (no es un parámetro requerido)
- limit. La cantidad de resultados a devolver, si se omite se asumen 10
- result
    - metadata. Responde un arreglo de objetos con el id, title, description, url y content del vector
    - json. Responde los metadatos y el contenido asociado completo en el campo 'content'
    - content. Responde un documento de texto con todo el contenido recuperado de la búsqueda en la forma
        ```
        title
        content
        source
        ---
        ...
        ```
    - answer. Responde un documento de texto con una respuesta de IA con base en el contenido y la pregunta (`default`)
- model. El identificador de un modelo de IA (LLM) usado si result es answer, si no se define se asume el modelo 'Inteligente'

> **Diferencia con la implementación (2026-10-19):** el parámetro `filters` todavía no se aplica: el servicio lee el campo indicado, pero la búsqueda se hace sin filtros.

Identificadores válidos de modelos
[Modelos](https://docs.induxsoft.net/es/iae/llm-supported.dkl).

> **Diferencia con la implementación (2026-10-19):** este servicio solo reconoce cuatro identificadores de modelo: `fast`, `smart` (el predeterminado, "Inteligente"), `precise` y `strategic`. Cualquier otro valor responde `El modelo indicado no es identificado`.

## Agregar o actualizar un vector

```
Método: POST
Authorization (header): Token del motor

https://search.api.induxsoft.net/{seid}/vector/

Carga útil (un solo elemento)

{
    "id": Numérico (entero - requerido)
    "title":"Texto a vectorizar (requerido)",
    "description":"Texto a vectorizar (requerido)",
    "url":"Una url de origen del contenido (opcional)",
    "content":"Contenido de datos asociado al vector(requerido)"
}

Carga útil (varios elementos)

[
    {
        "id": Numérico (entero - requerido)
        "title":"Texto a vectorizar(requerido)",
        "description":"Texto a vectorizar(requerido)",
        "url":"Una url de origen del contenido (opcional)",
        "content":"Contenido de datos asociado al vector(requerido)"
        
    },...
]

```
- seid. (Search Engine Id) es el identificador del motor de resultados(requerido).
- Si se omite el campo id se agregará un nuevo elemento de contenido al índice y se retornará el id asignado automáticamente.
- Si se establece el campo id y existe se actualizará, si no, se agregará
- Si no se indica el campo title o description o son idénticos a los alojados en el vector, solo se actualizará la información asociada (content) sin recalcular el vector

## Recuperar un vector

```
Método: GET
Authorization (header): Token del motor

https://search.api.induxsoft.net/{seid}/vector/{id}
```

- seid. (Search Engine Id) es el identificador del motor de resultados.

## Eliminar un vector

```
Método: DELETE
Authorization (header): Token del motor

https://search.api.induxsoft.net/{seid}/vector/{id}
```

- seid. (Search Engine Id) es el identificador del motor de resultados.

## Respuestas, errores y consumo de créditos

*Revisado contra el código del servicio el 2026-10-19.*

**Tipo de contenido de la respuesta de búsqueda**

| `result` | Content-Type | Contenido |
|---|---|---|
| `metadata` | `application/json;charset=utf-8` | Arreglo de objetos `{id, title, description, url, content}` en el orden de relevancia. |
| `json` | `application/json;charset=utf-8` | Igual que `metadata`, pero `content` trae el contenido completo de la página asociada (si existe). |
| `content` | `text/plain;charset=utf-8` | Documento de texto con `title`, `content` y la URL de origen de cada resultado, separados por `---`. |
| `answer` | `text/plain;charset=utf-8` | Texto con la respuesta del modelo de IA. |

**Errores.** Cuando algo falla, el servicio responde HTTP `500` con `Content-Type: text/plain` y un texto de la forma `{código} mensaje`. Por ejemplo:

```
HTTP/1.1 500
Content-Type: text/plain;charset=utf-8

{400} No autorizado
```

Mensajes frecuentes:

| Mensaje | Causa |
|---|---|
| `No ha indicado el ID del motor` | Falta `{seid}` en la URL. |
| `No se encontró datos el motor indicado` / `No se encontró datos del motor indicado` | `{seid}` no corresponde a un motor existente. |
| `No autorizado` | El encabezado `Authorization` no contiene el token del motor (de consulta para buscar y leer vectores; de actualización para agregar, modificar o eliminar). |
| `No ha indicado una consulta` | El campo indicado en `query-field` no viene en la carga útil o está vacío. |
| `Tipo de resultado indicado no válido` | `result` no es `metadata`, `json`, `content` ni `answer`. |
| `saldo mínimo para vectorizar, debe ser de 50mil créditos` | El plan del motor tiene menos de 50 000 créditos. |

**Créditos.** Las búsquedas con `result=answer` y el cálculo de vectores al agregar o actualizar un elemento consumen créditos del plan de IA asociado al motor. Ambas operaciones requieren que el plan tenga al menos **50 000 créditos** disponibles; las búsquedas `metadata`, `json` y `content` no consumen créditos.

**Agregar o actualizar un vector.**
- El `id` de la carga útil es el identificador del elemento en el índice. Si no existe, se crea un elemento nuevo con ese `id`; si se omite, se asigna uno.
- Para un elemento nuevo solo `title` es obligatorio (`El título es requerido`).
- `content` puede ser texto o un objeto JSON; si es un objeto se guarda tal cual y se devuelve como objeto.
- La respuesta es `application/json` con el elemento (o el arreglo de elementos) guardado.

**Recuperar un vector.** La respuesta es un objeto JSON con los campos `id`, `url`, `title`, `description`, `content`, `product`, `family`, `topic`, `vdb_id`, `created`, `sended`, `source`, `vector` y `relevant`.

**Eliminar un vector.** La respuesta exitosa es `null` con `Content-Type: application/json`.
