La Industry Algorithm Edition admite dos tipos de datos compuestos: OBJECT y NESTED. Estos tipos permiten combinar varios campos en una estructura anidada. El uso correcto de los tipos de datos compuestos mejora la precisión de las consultas, evita discrepancias y hace más eficiente la gestión de datos complejos.
Notas de uso
Los tipos OBJECT y NESTED aceptan datos JSON con la misma estructura y tienen configuraciones básicas similares. Sin embargo, su comportamiento de consulta es fundamentalmente diferente. El tipo NESTED conserva los límites del objeto, mientras que el tipo OBJECT aplana los datos.
|
Tipo |
OBJECT |
NESTED |
|
Método de almacenamiento subyacente |
Almacenamiento aplanado que pierde los límites del objeto.Por ejemplo: |
Utiliza almacenamiento independiente para documentos padre e hijo, lo que conserva la integridad del objeto. |
|
Semántica de consulta |
Pueden producirse coincidencias entre objetos, pero el rendimiento es mejor.Ejemplo: Esto puede coincidir con diferentes objetos de usuario: Alice (edad 30) y Bob (edad 25). |
La coincidencia se limita estrictamente a un solo objeto.Ejemplo: Solo puede coincidir con el único objeto de usuario donde name="Alice" y age=30. |
Límites
Los campos internos de los tipos OBJECT y NESTED se aplanan por nivel y los niveles se unen mediante guiones bajos. Estos campos se pueden configurar en el esquema de índice y como campos de propiedad.
-
La Industry Algorithm Edition tiene los siguientes límites para los campos OBJECT y NESTED:
El número total de campos no puede exceder 10.
La profundidad máxima de anidamiento es de 5 niveles.
El campo en sí no puede ser una propiedad.
Otros campos en el mismo nivel no pueden tener nombres que comiencen con el prefijo
{OBJECT_field_name}_o{NESTED_field_name}_. Por ejemplo, si un campo OBJECT se llamaabc, otro campo en el mismo nivel no puede llamarseabc_d.Solo se admiten aplicaciones Dedicated.
-
Los campos internos de los tipos OBJECT y NESTED tienen los siguientes límites:
No son compatibles con analizadores vectoriales.
No se pueden configurar como campo de enrutamiento, campo de ordenamiento de índice invertido ni espacio de nombres de índice vectorial.
No son compatibles con índices compuestos.
El nombre del índice creado debe ser igual al nombre del campo.
No son compatibles con expresiones de ordenamiento.
No se pueden configurar como campo de visualización.
No se pueden configurar como campo de entrenamiento de modelo.
Ejemplos
Creación de aplicación
Para obtener más información sobre la sintaxis, consulte Schema.
{
"name": "json_nested",
"type": "NESTED",
"primaryKey": false,
"innerSchema": {
"job": {
"name": "job",
"type": "TEXT",
"primaryKey": false
},
"ssn": {
"name": "ssn",
"type": "LITERAL",
"primaryKey": false
}
}
}
|
Campo |
Tipo |
Descripción |
|
type |
String |
El tipo de datos del campo. Para obtener más detalles sobre los campos, consulte Application schema. |
|
name |
String |
El nombre del campo. |
|
primaryKey |
Boolean |
Indica si el campo es una clave primaria. |
|
joinWith |
Array |
La colección de tablas de datos con las que se realizará la unión. |
|
innerSchema |
Object |
Especifica la estructura de datos cuando el tipo de campo es |
Envío de datos
Para un tipo OBJECT, el valor del campo es una cadena JSON.
[
{
"cmd": "add",
"timestamp": 1401342874777,
"fields": {
"id": "1",
"title": "This is the title",
"json_nested": "[{\"job\":\"Other\",\"ssn\":\"abc\"}]"
}
},
{
"cmd": "update",
"timestamp": 1401342874778,
"fields": {
"id": "1",
"json_nested": "{\"job\":\"Security Officer\",\"ssn\":\"abc\"}" // Can be a single object
}
},
{
"cmd": "delete",
"fields": {
"id": "1"
}
}
]
Búsqueda
El uso de índices para los campos internos de los tipos OBJECT y NESTED es igual que para los campos normales.
Para filtrar por un campo interno de un tipo NESTED, agregue
sub_doc:grouposub_doc:flata la cláusula config.Para ordenar por un campo interno de un tipo NESTED, agregue
sub_doc:flata la cláusula config.
Ejemplo:
query=json_nested_job:'Other'&&filter=json_nested_ssn="abc"&&sort=json_nested_ssn;-RANK&&config=sub_doc:flat
El modo sub_doc:flat tiene un rendimiento ligeramente inferior al del modo sub_doc:group.