Phrase TMS API

분석 집계(TMS)

컨텐츠는 영어 텍스트를 Phrase Language AI를 이용해 기계 번역한 것입니다.

집계 쿼리를 실행하는 데이터 저장소는 Elasticsearch(현재 버전 1.7.x)를 기반으로 구축됩니다. Elasticsearch는 Analytics API를 통해 실시간 검색 및 집계 기능을 제공하며, 그 위에 보안이 강화된 얇은 계층을 형성합니다. 예제에서는 Elasticsearch 쿼리 및 집계 언어가 사용됩니다.

  • 쿼리 JSON의 필터 필드에 사용되는 언어는 Elasticsearch 쿼리 DSL 설명서에 설명되어 있습니다.

  • 쿼리 JSON의 집계 필드에 사용되는 언어는 Elasticsearch 집계 설명서에 자세히 설명되어 있습니다.

인덱스

서로 다른 유형의 데이터는 서로 다른 인덱스에 있습니다. 예를 들어, 작업 데이터는 jobPart 인덱스에 있고 비용 데이터는 비용 인덱스에 있습니다. 필요한 데이터는 집계 API 엔드포인트 URL에 인덱스를 지정하여 지정할 수 있습니다.

상위-하위 문서

작업에 대한 정보의 일부는 Elasticsearch DB에 있는 두 개의 서로 다른 문서에 있습니다. 이러한 문서는 부모-자식 관계에 있습니다. 예를 들어, 작업의 프로젝트에 대한 정보는 상위 문서에 있고 작업 자체에 대한 정보는 하위 문서에 있습니다. 필요한 정보에 따라 집계는 데이터 부모-자식 집계 이전 또는 뒤에 있지만 데이터 집계 자체는 모든 쿼리에 있어야 합니다.

인덱스 데이터 모델

공통 데이터

분석

{
  "id": 문자열,
  "createdBy": <User>,
  "dateCreated": 날짜
  "dateDeleted": 날짜
  "dateTrashed": 날짜
  "deleted": boolean,
  "innerId": number,
  "name": 문자열,
  "tags": string[],
  "trashed": 불리언,
  "trashedBy": <User>,
  "type": string
}

숙제

{
  "name": 문자열,
  "linguist": <사용자>,
  "vendor": <Vendor>
}

제출자 포털

{
  "id": 문자열,
  "createdBy": <User>,
  "dateCreated": 날짜
  "dateDeleted": 날짜
  "dateTrashed": 날짜
  "deleted": boolean,
  "name": 문자열,
  "tags": string[],
  "trashed": 불리언,
  "urlId": string
}

사는 사람

{
  "id": 문자열,
  "name": string
}

클라이언트

{
  "id": 문자열,
  "dateCreated": 날짜
  "dateDeleted": 날짜
  "dateTrashed": 날짜
  "deleted": boolean,
  "externalId": 문자열,
  "name": 문자열,
  "tags": string[],
  "trashed": 불리언,
}

CostCenter

{
  "id": 문자열,
  "dateCreated": 날짜
  "dateDeleted": 날짜
  "dateTrashed": 날짜
  "deleted": boolean,
  "name": 문자열,
  "tags": string[],
  "trashed": 불리언,
}

도메인

{
  "id": 문자열,
  "dateCreated": 날짜
  "dateDeleted": 날짜
  "dateTrashed": 날짜
  "deleted": boolean,
  "name": 문자열,
  "tags": string[],
  "휴지통": 부울
}

직업

{
  "id": 문자열,
  "createdBy": <User>,
  "dateCreated": 날짜
  "dateDeleted": 날짜
  "dateTrashed": 날짜
  "deleted": boolean,
  "extension": 문자열,
  "fileName": string,
  "groupCount": number,
  "innerId": "1",
  "languagePair": string,
  "lastModified": 날짜
  "localePair": string,
  "sourceLanguage": string,
  "sourceLocale": string,
  "tags": string[],
  "targetLanguage": string,
  "targetLocale": string",
  "taskId": string,
  "trashed": 불리언,
  "trashedBy": <User>,
  "uid": string
}

JobPart

{
  "id": "19",
  "assignedTo": <Assignment>,
  "beginIndex": number,
  "buyer": <Buyer>,
  "createdBy": <User>,
  "dateCreated": 날짜
  "dateDue": 날짜
  "endIndex": number,
  "groupCount": number,
  "innerId": string,
  "lastModified": 날짜
  "level": 숫자,
  "status": string,
  "tags": [],
  "uid": 문자열,
  "workflowStep": <WorkflowStep>
}

MtEngine

{
  "id": 문자열,
  "deleted": boolean,
  "default_: boolean,
  "includeTags": boolean,
  "name": 문자열,
  "tags": string[],
  "type": string,
}

NetRateScheme

{
  "id": 문자열,
  "createdBy": <User>,
  "dateCreated": 날짜
  "dateDeleted": 날짜
  "default_": boolean,
  "deleted": boolean,
  "externalId": 문자열,
  "name": 문자열,
  "tags": string[],
}

PriceList

{
  "id": 문자열,
  "createdBy": <User>,
  "currency": 문자열,
  "dateCreated": 날짜
  "dateDeleted": 날짜
  "dateTrashed": 날짜
  "default_": boolean,
  "deleted": boolean,
  "name": 문자열,
  "tags": string[],
  "trashed": 불리언,
  "unit": string
}

프로젝트

{
  "id": 문자열,
  "buyer": <Buyer>,
  "client": <클라이언트>,
  "costCenter": <CostCenter>,
  "createdBy": <User>,
  "dateCreated": 날짜
  "dateDeleted": 날짜
  "dateDue": 날짜
  "dateTrashed": 날짜
  "deleted": boolean,
  "domain": <Domain>,
  "innerId": number,
  "languagePairs": string[],
  "localePairs": string[],
  "mtEngine": <MtEngine>,
  "name": 문자열,
  "note": 문자열,
  "owner": <사용자>,
  "sourceLanguage": string,
  "sourceLocale": string,
  "status": string,
  "subDomain": <SubDomain>,
  "tags": string[],
  "targetLanguages": string[],
  "targetLocales": string[],
  "trashed": 불리언,
  "trashedBy": <User>,
  "uid": 문자열,
  "vendor": <Vendor>
}

견적

{
  "id": 문자열,
  "createdBy : < 사용자>,
  "currency": 문자열,
  "dateCreated": 날짜
  "dateDeleted": 날짜
  "dateTrashed": 날짜
  "deleted": boolean,
  "innerId": string,
  "name": 문자열,
  "status": string,
  "tags": string[],
  "trashed": 불리언,
  "trashedBy": <User>,
  "unit": string
}

서비스

{
  "id": 문자열,
  "dateCreated": 날짜
  "dateDeleted": 날짜
  "dateTrashed": 날짜
  "deleted": boolean,
  "name": 문자열,
  "publicName": string,
  "tags": string[],
  "trashed": 불리언,
  "type": string
}

SubDomain

{
  "id": 문자열,
  "dateCreated": 날짜
  "dateDeleted": 날짜
  "dateTrashed": 날짜
  "deleted": boolean,
  "name": 문자열,
  "tags": string[],
  "휴지통": 부울
}

사용자

{
  "id": 숫자,
  "active": boolean,
  "dateCreated": 날짜
  "dateDeleted": 날짜
  "dateTrashed": 날짜
  "deleted": boolean,
  "email": 문자열,
  "firstName": string,
  "fullName": 문자열,
  "innerId": number,
  "jobTitle": string,
  "lastName": string,
  "locale": 문자열,
  "note": 문자열,
  "role": 문자열,
  "tags": string[],
  "timeZone": string,
  "trashed": 불리언,
  "userName": string
}

점원

{
  "id": 문자열,
  "candidate": boolean,
  "dateCreated": 날짜
  "dateDeleted": 날짜
  "dateTrashed": 날짜
  "deleted": boolean,
  "tags": string[],
  "token": 문자열,
  "휴지통": 부울
}

WorkflowStep

{
  "id": 문자열,
  "abbreviation": string,
  "dateDeleted": 날짜
  "dateTrashed": 날짜
  "name": 문자열,
  "order": 숫자,
  "tags": string[],
  "휴지통": 부울
}

분석 지수

데이터 집계

"data": {
  "children": {
    "type": "analysisType"
  }
}

상위 문서

{
  "automationWidget": <AutomationWidget>,
  "project": <Project>,
  "service": <Service>
}

하위 문서

{
  "analysis": <Analysis>,
  "jobPart": <JobPart>,
  "job": <Job>,
  "netRateScheme": <NetRateScheme>,

  "priority": number,
  "data": {
    "mt": {
      "match0": {
        "characters": 숫자,
        "pages": 숫자,
        "percent": 숫자,
        "segments": number,
        "words": number
      },
      "match100": {
        "characters": 숫자,
        "pages": 숫자,
        "percent": 숫자,
        "segments": number,
        "words": number
      },
      "match50": {
        "characters": 숫자,
        "pages": 숫자,
        "percent": 숫자,
        "segments": number,
        "words": number
      },
      "match75": {
        "characters": 숫자,
        "pages": 숫자,
        "percent": 숫자,
        "segments": number,
        "words": number
      },
      "match85": {
        "characters": 숫자,
        "pages": 숫자,
        "percent": 숫자,
        "segments": number,
        "words": number
      },
      "match95": {
        "characters": 숫자,
        "pages": 숫자,
        "percent": 숫자,
        "segments": number,
        "words": number
      }
    },
    "repetitions": {
      "characters": 숫자,
      "pages": 숫자,
      "percent": 숫자,
      "segments": number,
      "words": number
    },
    "tm": {
      "match0": {
        "characters": 숫자,
        "pages": 숫자,
        "percent": 숫자,
        "segments": number,
        "words": number
      },
      "match100": {
        "characters": 숫자,
        "pages": 숫자,
        "percent": 숫자,
        "segments": number,
        "words": number
      },
      "match101": {
        "characters": 숫자,
        "pages": 숫자,
        "percent": 숫자,
        "segments": number,
        "words": number
      },
      "match50": {
        "characters": 숫자,
        "pages": 숫자,
        "percent": 숫자,
        "segments": number,
        "words": number
      },
      "match75": {
        "characters": 숫자,
        "pages": 숫자,
        "percent": 숫자,
        "segments": number,
        "words": number
      },
      "match85": {
        "characters": 숫자,
        "pages": 숫자,
        "percent": 숫자,
        "segments": number,
        "words": number
      },
      "match95": {
        "characters": 숫자,
        "pages": 숫자,
        "percent": 숫자,
        "segments": number,
        "words": number
      }
    },
    "total": {
      "characters": 숫자,
      "pages": 숫자,
      "percent": 숫자,
      "segments": number,
      "words": number
    }
  }
}

API 색인

데이터 집계

"data": {
  "children": {
    "type": "apiType"
  }
}

상위 문서

{
  "user": <User>
}

하위 문서

{
  "request": {
    "date": 날짜
    "host": string,
    "ipv4": 문자열,
    "ipv6": 문자열,
    "location": string,
    "method": 문자열
  },
  "response": {
    "date": 날짜
    "duration": number,
    "status": number
  },
  "api": {
    "action": 문자열,
    "asynch": boolean,
    "type": string,
    "uri": 문자열,
    "ver": 문자열
  }
}

비용 지수

데이터 집계

"data": {
  "children": {
    "type": "costsType"
  }
}

상위 문서

{
  "automationWidget": <AutomationWidget>,
  "project": <Project>,
  "service": <Service>
}

하위 문서

{
  "analysis": <Analysis>,
  "job": <Job>,
  "jobPart": <JobPart>,
  "netRateScheme": <NetRateScheme>,
  "priceList": <PriceList>,
  "quote": <인용>,
  "workflowStep": <WorkflowStep>,
  
  "priority": number,
  "data": {
    "mt": {
      "match0": 숫자,
      "match100": number,
      "match50": 숫자,
      "match75": number,
      "match85": 숫자,
      "match95": 숫자
    },
    "반복": 숫자,
    "tm": {
      "match0": 숫자,
      "match100": number,
      "match101": 숫자,
      "match50": 숫자,
      "match75": number,
      "match85": 숫자,
      "match95": 숫자
    },
    "total": 숫자
  }
}

jobPart 인덱스

데이터 집계

"data": {
  "children": {
    "type": "jobPartType"
  }
}

상위 문서

{
  "automationWidget": <AutomationWidget>,
  "project": <Project>,
  "service": <Service>
}

하위 문서

{
  "job": <Job>,
  "jobPart": <JobPart>

  "data": {
    "counts": {
      "chars": {
      "total": 숫자,
      "confirmed": number,
      "notConfirmed": number,
      "locked": 숫자,
      "notLocked": number,
      "confirmedAndLocked": number,
      "notConfirmedAndLocked": number,
      "completed": 숫자,
      "notCompleted": number
    },
    "groups": {
      "total": 숫자
    },
    "segments": {
      "total": 숫자,
      "confirmed": number,
      "notConfirmed": number,
      "locked": 숫자,
      "notLocked": number,
      "confirmedAndLocked": number,
      "notConfirmedAndLocked": number,
      "completed": 숫자,
      "notCompleted": number,
      "mt": {
        "postEdited": number,
        "relevant": number,
        "notRelevant": number
      },
      "qa": {
        "checked": 숫자,
        "notChecked": number
      }
    },
    "words": {
      "total": 숫자,
      "confirmed": number,
      "notConfirmed": number,
      "locked": 숫자,
      "notLocked": number,
      "confirmedAndLocked": number,
      "notConfirmedAndLocked": number,
      "completed": 숫자,
      "notCompleted": number
    },
    "qa": {
      "warnings": 숫자,
      "ignoredWarnings": number,
      "notIgnoredWarnings": number
    }
  }
}

예제

  • HTTP 요청은 Postman에서 실행됩니다.

  • PM 또는 관리자 프로필을 통해 로그인하고 로그인 API를 사용하여 로그인 토큰을 가져옵니다.

  • api/v3/analytics/jobPart?token=<에 대한 POST 요청 your_login_token>

총 작업 수

쿼리

{
  "aggregations": {
    "data": {
      "children": {
        "type": "jobPartType"
      }
    }
  }
}

응답

{
  "hits": {
    "total": 359
  },
  "aggregations": {
    "data": {
      "doc_count": 14417
    }
  }
}

집계 필드에서 데이터 집계는 doc_count 필드에 표시된 14,417개의 일치하는 문서로 응답했습니다.

총 원본 단어 수

쿼리

{
  "aggregations": {
    "data": {
      "children": {
        "type": "jobPartType"
      },
      "aggs": {
        "wordCount": {
          "sum": {
            "field": "data.volume.words"
          }
        }
      }
    }
  }
}

응답

{
  "hits": {
    "total": 359
  },
  "aggregations": {
    "data": {
      "doc_count": 14417,
      "wordCount": {
        "value": 6893067
      }
    }
  }
}

대상 언어로 나눈 원본 단어의 총 수

쿼리

{
  "aggregations": {
    "data": {
      "children": {
        "type": "jobPartType"
      },
      "aggs": {
        "byTargetLanguage": {
          "terms": {
            "field": "job.targetLanguage",
            "size": 3
          },
          "aggs": {
            "wordCount": {
              "sum": {
                "field": "data.volume.words"
              }
            }
          }
        }
      }
    }
  }
}

응답

{
  "hits": {
    "total": 359
  },
  "aggregations": {
    "data": {
      "byTargetLanguage": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 10071,
        "buckets": [
          {
            "doc_count": 1835,
            "wordCount": {
              "value": 702721
            },
            "key": "cs"
          },
          {
            "doc_count": 1491,
            "wordCount": {
              "value": 2602529
            },
            "key": "de"
          },
          {
            "doc_count": 1020,
            "wordCount": {
              "value": 92676
            },
            "key": "fi"
          }
        ]
      },
      "doc_count": 14417
    }
  }
}

buckets 엔터티가 응답에 표시됩니다. 분석 모듈에서 일부 범주별로 데이터를 분할하도록 요청하면 결과가 버킷 목록으로 표시됩니다. 각 버킷에는 이 버킷이 나타내는 데이터(이 경우 대상 언어)를 정의하는 키와 데이터 세트의 이 부분에만 해당하는 값(기타 집계)이 포함되어 있습니다.

프로젝트 상태로 나눈 총 작업 수

쿼리

{
  "aggregations": {
    "projectStatus": {
      "terms": {
        "field": "project.status"
      },
      "aggs": {
        "data": {
          "children": {
            "type": "jobPartType"
          }
        }
      }
    }
  }
}

응답(Reponse)

{
  "hits": {
    "total": 359
  },
  "aggregations": {
    "projectStatus": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "doc_count": 326,
          "data": {
            "doc_count": 14318
          },
          "key": "NEW"
        },
        {
          "doc_count": 31,
          "data": {
            "doc_count": 89
          },
          "key": "완료됨"
        },
        {
          "doc_count": 1,
          "data": {
            "doc_count": 4
          },
          "key": "할당됨"
        },
        {
          "doc_count": 1,
          "data": {
            "doc_count": 6
          },
          "key": "DECLINED_BY_VENDOR"
        }
      ]
    }
  }
}

Analytics 모듈은 데이터 집계 전에 프로젝트 상태별로 데이터를 분할하라는 지시를 받았습니다.

새 프로젝트의 총 작업 수

쿼리

{
  "filter": {
    "term": {
      "project.status": "NEW"
    }
  },
  "aggregations": {
    "data": {
      "children": {
        "type": "jobPartType"
      }
    }
  }
}

응답(Reponse)

{
  "hits": {
    "total": 326
  },
  "aggregations": {
    "data": {
      "doc_count": 14318
    }
  }
}

필터 필드는 쿼리에 사용됩니다. 이렇게 하면 집계를 따르기 전에 데이터의 범위가 좁혀집니다.

도움이 되었습니까?

Sorry about that! In what way was it not helpful?

The article didn’t address my problem.
I couldn’t understand the article.
The feature doesn’t do what I need.
Other reason.

Note that feedback is provided anonymously so we aren't able to reply to questions.
If you'd like to ask a question, submit a request to our Support team.
Thank you for your feedback.