Elasticsearch-Verknüpfungsfeld erstellen (Nodejs)

Nov 21 2020

Ich habe die folgenden Dokumente:

export class CustomerServiceResultType{
  id: string;
  body:{customerRelation: string};
}

export class CustomerType{
  id: string;
  body:{name: string};
}

Ich möchte CustomerServiceResultTypeeine Beziehung zum CustomerTypeFeld 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

1 JoeSorocin Nov 26 2020 at 20:54

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 typeAspekt aufweist, die beiden Konzepte jedoch sehr weit voneinander entfernt sind.