Elasticsearch-Verknüpfungsfeld erstellen (Nodejs)
Ich habe die folgenden Dokumente:
export class CustomerServiceResultType{
id: string;
body:{customerRelation: string};
}
export class CustomerType{
id: string;
body:{name: string};
}
Ich möchte CustomerServiceResultType
eine Beziehung zum CustomerType
Feld haben : customerRelation
.
Das ist meine Zuordnung:
await this.elasticsearchService.indices.putMapping({
"index": "db",
"type": "CustomerServiceResultType",
"body" : {
"properties": {
"customerRelation": {
"type": "join",
"relations": {
"CustomerServiceResultType": "CustomerType"
}
}
}
}
});
Dies ist der Fehler, den ich bekomme:
[Nest] 421512 - 11/21/2020, 6:40:42 PM [ExceptionsHandler] illegal_argument_exception +96414ms
ResponseError: illegal_argument_exception
Es gibt keine Details zu diesem Fehler ...
Vielen Dank
Antworten
An Ihrer Anfrage an sich ist nichts auszusetzen - ich denke, es ist nur eine zusätzliche Option erforderlich : include_type_name: true
.
Es ist undefinedstandardmäßig in NodeJS aber in erforderlich ES 7.x auf der Serverseite. Weitere Gründe dafür finden Sie hier .
Das sollte also den Trick machen:
await client.indices.putMapping({
include_type_name: true,
index: "db",
type: "CustomerServiceResultType",
body : {
properties: {
customerRelation: {
type: "join",
relations: {
CustomerServiceResultType: "CustomerType"
}
}
}
}
});
Typisierte Indizes werden in 8.x entfernt, sodass der beste Ansatz tatsächlich wäre:
await client.indices.putMapping({
index: "db",
body : {
properties: {
customerRelation: {
type: "join",
relations: {
CustomerServiceResultType: "CustomerType"
}
}
}
}
});
Übrigens: Ihre Typoskripttypen spielen hier keine wirkliche Rolle, da ES eine reine JSON-Schnittstelle ist und ES zwar einen veralteten type
Aspekt aufweist, die beiden Konzepte jedoch sehr weit voneinander entfernt sind.