Uso de VECTORES en ObjectScript
La mayoría de los ejemplos que he visto hasta ahora en OEX o DC dejan la impresión de que los VECTORES son sólo algo disponible con SQL con las 3 Funciones especialmente alrededor de VECTOR_Search.
* TO_VECTOR()
* VECTOR_DOT_PRODUCT ()
* VECTOR_COSINE ()
Hay un resumen muy útil escondido en el paquete de demostración iris-vector-search.
Desde allí encontraréis todo lo que necesitáis en varios enlaces y rincones.
Me faltaban más métodos VECTOR y añadí una solicitud al respecto en el Portal de Ideas.
Luego recordé que cada método o procedimiento SQL se basa en un montón de código ObjectScript.
Así que fui a buscarlo y este es el resumen de la investigación.
%Library.Vector es la descripción básica del nuevo DataType (tipo de datos).
Es una estructura compleja como Objects o %DynamicObjects o $Bit Expressions que requieren métodos de acceso específicos.
También vemos 2 parámetros requeridos:
* DATATTYPE - una vez configurado no se puede cambiar.
Tipos aceptados: "integer" (o "int"), "double", "decimal", "string" y "timestamp".
* LEN >0 , puede crecer pero nunca reducirse.
$vector() / &ve() es el método básico para el acceso al Vector.
* Asignar Datos Vectoriales >>> SET $VE(. . .) = val
* Devolver Datos Vectoriales >>> WRITE $VE(. . .) , SET var=$VE(. . .)
¡SUGERENCIA: una sola posición devuelve el valor, pero la posición from::to devuelve otro Vector!
* Eliminar Datos Vectoriales >>> KILL $VE(. . .)
Los 3 requieren al menos 1 parámetro de Posición. Podéis entender esto como dimensiones.
$isvector() la verificación obvia del formato correcto antes de comenzar las operaciones.
$vectorop() / $vop() cubre todas las demás funciones relacionadas con los vectores.
Los parámetros de llamada suelen ser (operación, vector)
Algunas operaciones ofrecen opcionalmente un bitexpr. Marca posiciones/dimensiones a excluir/incluir.
Ejemplo:
- Pensad en un vector 3D. Solo se desea operar en los ejes x e y, no en z.
Operaciones de un solo vector
Operaciones Agregadas
* "count"
* "max"
* "min"
* "sum"
Operaciones de filtrado
* "defined"
* "undefined"
* "<"
* "<="
* ">"
* ">="
* "="
* "!="
* "between"
Operaciones Numéricas
* "+"
* "-"
* "/"
* "*"
* "**"
* "#"
* "e-"
* "e/"
* "ceiling"
* "floor"
Operaciones de String
* "_"
* "e_"
* "lower"
* "upper"
* "substring"
* "trim"
* "triml"
* "trimr"
Operaciones de Agrupación
* "group"
* "countgb"
Operaciones Diversas
* "convert"
* "length"
* "mask"
* "positions"
* "set"
Operaciones Informativas
* "bytesize"
* "type"
Operaciones multivectoriales (normalmente 2 vectores)
Operaciones de Filtrado Vectorial
* "v<"
* "v<="
* "v>"
* "v>="
* "v="
* "v!="
Operaciones Aritméticas Vectoriales
* "v+"
* "v-"
* "v/"
* "v*"
* "v**"
* "v#"
Concatenación de vectores
* "v_"
Agrupación de Vectores
* "countg"
* "maxg"
* "ming"
* "sumg"
Fusión de Vectores
* "vset"
Ya veis que hay un rico conjunto de herramientas disponibles. Si se estudian los documentos en detalle, el propósito o la ventaja de los resultados puede que no sean evidentes de inmediato. No obstante, espero que os hayáis hecho una idea general de lo que hay disponible ahora.