OpenSearch proporciona funciones definidas por el usuario (UDF) integradas para la coincidencia de campos, recuperación de índices, mapeo de valores, comprobación de rangos y normalización de puntuaciones.
Lista de UDF
|
Nombre de la función |
Descripción |
|
Comprueba si el valor de un campo se encuentra en una colección determinada. Admite valores únicos y múltiples. |
|
|
Comprueba si el valor de un campo no se encuentra en una colección determinada. Admite valores únicos y múltiples. |
|
|
Consulta el índice invertido de un campo especificado mediante una condición dada. |
|
|
Consulta el índice invertido mediante una condición dada. Utiliza la sintaxis de consulta original de HA3. |
|
|
Combina varios valores int64 en un único valor int64. |
|
|
Asigna un valor continuo a un valor discreto. |
|
|
Comprueba si el valor de un campo se encuentra dentro de un intervalo determinado. |
|
|
Normaliza el valor de un campo. |
Ejemplos de recuperación
Recuperar todo el contenido de la tabla
SELECT nid, price, brand, size FROM phone ORDER BY nid LIMIT 1000
USE_TIME: 0.881, ROW_COUNT: 10
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
1 | 3599 | Huawei | 5.9 |
2 | 4388 | Huawei | 5.5 |
3 | 899 | Xiaomi | 5 |
4 | 2999 | OPPO | 5.5 |
5 | 1299 | Meizu | 5.5 |
6 | 169 | Nokia | 1.4 |
7 | 3599 | Apple | 4.7 |
8 | 5998 | Apple | 5.5 |
9 | 4298 | Apple | 4.7 |
10 | 5688 | Samsung | 5.6 |
contain
-
Prototipo
boolean contain(INT a, const string b) boolean contain(LITERAL a, const string b) boolean contain(INT_ARRAY a, const string b) boolean contain(LITERAL_ARRAY a, const string b) Descripción
Comprueba si el parámetro a contiene el contenido especificado en el parámetro b.
-
Parámetros
Parámetro a: parámetro de entrada. Los tipos de datos compatibles son INT, LITERAL, INT_ARRAY y LITERAL_ARRAY.
Parámetro b: expresión de cadena constante. Puede usar una barra vertical (|) para separar varios valores. La función devuelve true si alguno de los valores coincide.
-
Valor de retorno
Devuelve un valor booleano que indica si el parámetro a contiene la colección especificada en el parámetro b.
Ejemplo
SELECT nid, price, brand, size FROM phone WHERE contain(nid, '1|2|3') ORDER BY nid LIMIT 100
USE_TIME: 0.059, ROW_COUNT: 3
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
1 | 3599 | Huawei | 5.9 |
2 | 4388 | Huawei | 5.5 |
3 | 899 | Xiaomi | 5 |
notcontain
-
Prototipo
boolean notcontain(INT a, const string b) boolean notcontain(LITERAL a, const string b) boolean notcontain(INT_ARRAY a, const string b) boolean notcontain(LITERAL_ARRAY a, const string b) -
Descripción
Comprueba si el parámetro a no contiene el contenido especificado en el parámetro b.
-
Parámetros
Parámetro a: parámetro de entrada. Los tipos de datos compatibles son INT, LITERAL, INT_ARRAY y LITERAL_ARRAY.
Parámetro b: expresión de cadena constante. Puede usar una barra vertical (|) para separar varios valores. La función devuelve true si ninguno de los valores coincide.
-
Valor de retorno
Devuelve un valor booleano que indica si el parámetro a no se encuentra en la colección especificada por el parámetro b.
-
Ejemplo
Utilice la función
notcontainpara recuperar todos los registros donde el valor del camponidno se encuentre en el rango [1, 2, 3].SELECT nid, price, brand, size FROM phone WHERE notcontain(nid, '1|2|3') ORDER BY nid LIMIT 100USE_TIME: 0.092, ROW_COUNT: 7 ------------------------------- TABLE INFO --------------------------- nid | price | brand | size | 4 | 2999 | OPPO | 5.5 | 5 | 1299 | Meizu | 5.5 | 6 | 169 | Nokia | 1.4 | 7 | 3599 | Apple | 4.7 | 8 | 5998 | Apple | 5.5 | 9 | 4298 | Apple | 4.7 | 10 | 5688 | Samsung | 5.6 |
MATCHINDEX
-
Prototipo
boolean MATCHINDEX(const string a, const string b) -
Descripción
Comprueba si el campo a contiene el contenido especificado en b. Esta función se utiliza para la recuperación de índices de un solo campo.
Se usa exclusivamente para la aceleración y optimización del índice invertido durante la fase de recuperación de una tabla de índices. Se puede utilizar en la cláusula WHERE.
-
Parámetros
Parámetro a: cadena constante que especifica el campo para el cual se creó un índice invertido con fines de optimización.
Parámetro b: cadena constante que especifica el contenido que se debe buscar.
El valor del parámetro b se busca como una sola cadena.
-
Valor de retorno
Devuelve un valor booleano que indica si el campo a contiene el contenido especificado en el parámetro b.
-
Ejemplo
Utilice la función
MATCHINDEXpara recuperar registros donde el campo de índice invertidotitlecontenga la palabra clave "camera".SELECT nid, brand FROM phone WHERE MATCHINDEX('title', 'camera')------------------------------- TABLE INFO --------------------------- nid | brand | 1 | Huawei |
QUERY
-
Prototipo
boolean QUERY(const string a, const string b) -
Descripción
Comprueba si el campo a contiene el contenido especificado en b. Esta función ofrece capacidades automáticas de tokenización y recuperación.
Esta función permite utilizar la sintaxis de consulta nativa de HA3 en modo SQL.
Se usa exclusivamente para la aceleración y optimización del índice invertido durante la fase de recuperación de una tabla de índices. Se puede utilizar en la cláusula WHERE.
-
Parámetros
Parámetro a: cadena constante que especifica el campo de índice predeterminado.
Parámetro b: constante de cadena que proporciona la expresión de consulta.
Este parámetro es analizado por el analizador sintáctico de consultas y admite índices de rango.
-
Valor de retorno
Devuelve un valor booleano que indica si el campo a contiene el contenido especificado en el parámetro b.
-
Ejemplo
Utilice la función
QUERYpara consultar elementos donde el campotitlecontenga "Huawei phone". Utilice condiciones combinadas para recuperar elementos donde el campo
titlecontenga "Huawei phone" u "OPPO phone".-
Nota:
El segundo parámetro de la UDF QUERY es procesado por el analizador sintáctico de consultas de HA3. Si el segundo parámetro es una cadena constante, las comillas simples circundantes se eliminan antes de pasar la cadena al analizador de consultas de HA3. Por ejemplo,
QUERY(title, 'Huawei phone OPPO phone')equivale a la consulta de HA3query=Huawei phone OPPO phone. Para incluir comillas en la consulta, como en la cadena de consulta de HA3query='Huawei phone' AND 'OPPO phone', utilice la expresiónQUERY(title, '''Huawei phone'' AND ''OPPO phone'''). Para obtener más información sobre las cadenas constantes en instrucciones SQL, consulte la sección 'Constant strings' en Límites. Errores comunes:
SELECT nid, price, brand, size FROM phone WHERE QUERY(title, 'Huawei phone')
USE_TIME: 0.034, ROW_COUNT: 1
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
2 | 4388 | Huawei | 5.5 |
SELECT nid, price, brand, size FROM phone
WHERE QUERY(title, 'Huawei phone OR OPPO phone')
USE_TIME: 0.03, ROW_COUNT: 2
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
2 | 4388 | Huawei | 5.5 |
4 | 2999 | OPPO | 5.5 |
|
Tipo de error |
Formato incorrecto |
Formato correcto |
|
Error de sintaxis. La consulta no devuelve resultados. |
QUERY('pidvid','123:456') |
QUERY('pidvid','"123:456"') |
rangevalue
-
Prototipo
float rangevalue(float v, string desc) Descripción
Asigna un valor continuo a un valor discreto.
-
Parámetros
Parámetro v: columna que contiene los valores continuos.
Parámetro desc: regla de asignación.
-
Valor de retorno
El valor discreto asignado.
-
Ejemplo
Utilice la función
rangevaluepara asignar los valores del campoprice. Los valores menores o iguales a 1000 se asignan a 1.0. Los valores mayores que 1000 y menores o iguales a 5000 se asignan a 2.0. El resto de los valores no se asignan y conservan su valor original.SELECT rangevalue(price,'(,1000]:1.0;(1000,5000]:2.0') FROM phone;
range
-
Prototipo:
boolean range(INT v, const string rangeDesc) boolean range(FLOAT v, const string rangeDesc) boolean range(DOUBLE v, const string rangeDesc) Descripción
Comprueba si el valor de un campo de índice directo se encuentra dentro de un intervalo especificado.
-
Parámetros
Parámetro v: campo, que admite tipos numéricos de un solo valor.
Parámetro rangeDesc: constante que especifica el rango numérico. Se admiten intervalos abiertos, cerrados y semiabiertos.
-
Valor de retorno
Devuelve un valor booleano que indica si v se encuentra dentro del rango especificado por rangeDesc. La siguiente tabla muestra las expresiones admitidas y sus valores de retorno.
|
Ejemplo de llamada |
Valor de retorno |
|
range(v, "[0, 100]") |
0<=v<=100 |
|
range(v, "(0, 100)") |
0<v<100 |
|
range(v, "[0, 100)") |
0<=v<100 |
|
range(v, "(0, 100]") |
0<v<=100 |
|
range(v, "(0,)") range(v, "(0,]") |
0<v |
|
range(v, "[0,)") range(v, "[0,]") |
0<=v |
|
range(v, "(,100)") range(v, "[,100)") |
v<100 |
|
range(v, "(,100]") range(v, "[,100]") |
v<=100 |
|
range(v, "(,)") range(v, "[,]") range(v, "[,)") range(v, "(,]") |
true |
Nota: El parámetro rangeDesc también admite el uso de un signo de exclamación (!) al inicio de la cadena para negar el intervalo especificado.
-
Ejemplo
Utilice la función
range:SELECT nid FROM phone where range(price,"(127.0,30.0)") SELECT nid FROM phone where range(price,"!(127.0,30.0)")Nota:
rangees una palabra clave reservada de SQL y debe escaparse.
normalizescore
-
Prototipo
double normalizescore(INT v, const double defaultScore) double normalizescore(FLOAT v, const double defaultScore) double normalizescore(DOUBLE v, const double defaultScore) Descripción
Normaliza el valor del campo de entrada v al tipo de datos double. Si el campo no está inicializado, se utiliza la puntuación predeterminada.
-
Parámetros
Parámetro v: campo, que admite tipos numéricos de un solo valor.
Parámetro defaultScore: constante que especifica la puntuación predeterminada. Debe ser una cadena que pueda convertirse en un valor double válido.
-
Valor de retorno
Devuelve el valor original de v si v está inicializado. De lo contrario, devuelve el valor de
defaultScore. Ejemplo
For three documents that have a `price` field, the original content is as follows:
doc1: price=1.0
doc2: price= (not initialized)
doc3: price=2.0
Execute
select normalizescore(price, "1000.0") as normalized_score from phone
USE_TIME: 32.141ms, ROW_COUNT: 2
------------------------------- TABLE INFO ---------------------------
normalized_score(double) |
1.0 |
1000.0 |
2.0. |