Elasticsearch 조인 필드 생성 (Nodejs)

Nov 21 2020

다음 문서가 있습니다.

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

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

필드와 CustomerServiceResultType관계를 맺고 싶습니다 CustomerType: customerRelation.

이것은 내 매핑입니다.

await this.elasticsearchService.indices.putMapping({
  "index": "db",
  "type": "CustomerServiceResultType",
  "body" : {
      "properties": {
        "customerRelation": {
          "type": "join",
          "relations": {
            "CustomerServiceResultType": "CustomerType"
          }
      }
    }
  }
});

이것은 내가 얻는 오류입니다.

[Nest] 421512   - 11/21/2020, 6:40:42 PM   [ExceptionsHandler] illegal_argument_exception +96414ms
ResponseError: illegal_argument_exception

이 오류에 대한 세부 정보가 없습니다 ...

감사

답변

1 JoeSorocin Nov 26 2020 at 20:54

귀하의 요청에는 문제가 없습니다 include_type_name: true. 하나의 추가 옵션이 필요하다고 생각합니다 ..

그건 undefined기본적으로 nodejs이 아니라 필요하다 ES 7.x의 서버 측에서. 이것 뒤에 더 많은 추론이 여기에 있습니다 .

따라서 이것은 트릭을 수행해야합니다.

await client.indices.putMapping({
  include_type_name: true,
  index: "db",
  type: "CustomerServiceResultType",
  body : {
      properties: {
        customerRelation: {
          type: "join",
          relations: {
            CustomerServiceResultType: "CustomerType"
          }
      }
    }
  }
});

형식화 된 인덱스는 8.x에서 제거되므로 실제로 가장 좋은 방법은 다음과 같습니다.

await client.indices.putMapping({
  index: "db",
  body : {
      properties: {
        customerRelation: {
          type: "join",
          relations: {
            CustomerServiceResultType: "CustomerType"
          }
      }
    }
  }
});

BTW : ES는 JSON 전용 인터페이스이고 typeES에 더 이상 사용되지 않는 측면이 있지만 두 가지 개념은 매우 멀기 때문에 여기서 typescript 유형은 실제로 역할을 수행하지 않습니다 .