Elasticsearch criar campo de junção (Nodejs)
Eu tenho os seguintes documentos:
export class CustomerServiceResultType{
id: string;
body:{customerRelation: string};
}
export class CustomerType{
id: string;
body:{name: string};
}
Eu quero CustomerServiceResultTypeter uma relação CustomerTypecom o campo: customerRelation.
este é o meu mapeamento:
await this.elasticsearchService.indices.putMapping({
"index": "db",
"type": "CustomerServiceResultType",
"body" : {
"properties": {
"customerRelation": {
"type": "join",
"relations": {
"CustomerServiceResultType": "CustomerType"
}
}
}
}
});
Este é o erro que recebo:
[Nest] 421512 - 11/21/2020, 6:40:42 PM [ExceptionsHandler] illegal_argument_exception +96414ms
ResponseError: illegal_argument_exception
Não há detalhes sobre este erro ...
obrigado
Respostas
Não há nada de errado com seu pedido per-se - Eu acho que ele só requer uma opção extra: include_type_name: true.
É undefinedpor padrão no nodejs, mas é necessário no ES 7.x no lado do servidor. Mais raciocínio por trás disso está aqui .
Então, isso deve funcionar:
await client.indices.putMapping({
include_type_name: true,
index: "db",
type: "CustomerServiceResultType",
body : {
properties: {
customerRelation: {
type: "join",
relations: {
CustomerServiceResultType: "CustomerType"
}
}
}
}
});
Os índices digitados serão removidos no 8.x, portanto, a melhor abordagem seria:
await client.indices.putMapping({
index: "db",
body : {
properties: {
customerRelation: {
type: "join",
relations: {
CustomerServiceResultType: "CustomerType"
}
}
}
}
});
BTW: seus tipos de texto digitado realmente não desempenham um papel aqui porque ES é uma interface somente JSON e embora haja o typeaspecto obsoleto do ES, os dois conceitos são muito distantes.