Elasticsearch crear campo de unión (Nodejs)
Tengo los siguientes documentos:
export class CustomerServiceResultType{
id: string;
body:{customerRelation: string};
}
export class CustomerType{
id: string;
body:{name: string};
}
Quiero CustomerServiceResultTypetener una relación con CustomerTypeel campo: customerRelation.
este es mi mapeo:
await this.elasticsearchService.indices.putMapping({
"index": "db",
"type": "CustomerServiceResultType",
"body" : {
"properties": {
"customerRelation": {
"type": "join",
"relations": {
"CustomerServiceResultType": "CustomerType"
}
}
}
}
});
Este es el error que obtengo:
[Nest] 421512 - 11/21/2020, 6:40:42 PM [ExceptionsHandler] illegal_argument_exception +96414ms
ResponseError: illegal_argument_exception
No hay detalles sobre este error ...
Gracias
Respuestas
No hay nada malo con su petición per se - Creo que sólo requiere una opción adicional: include_type_name: true.
Está undefinedpor defecto en nodejs, pero es necesario en ES 7.x en el lado del servidor. Más razonamiento detrás de esto está aquí .
Así que esto debería funcionar:
await client.indices.putMapping({
include_type_name: true,
index: "db",
type: "CustomerServiceResultType",
body : {
properties: {
customerRelation: {
type: "join",
relations: {
CustomerServiceResultType: "CustomerType"
}
}
}
}
});
Los índices escritos se eliminarán en 8.x, por lo que el mejor enfoque sería:
await client.indices.putMapping({
index: "db",
body : {
properties: {
customerRelation: {
type: "join",
relations: {
CustomerServiceResultType: "CustomerType"
}
}
}
}
});
Por cierto: sus tipos de mecanografiado realmente no juegan un papel aquí porque ES es una interfaz solo JSON y, si bien existe el typeaspecto obsoleto de ES, los dos conceptos son muy distantes.