집계 쿼리를 실행하는 데이터 저장소는 엘라스틱서치 위에 구축되어 있습니다 (현재 버전 1.7.x). 엘라스틱서치는 실시간 검색 및 집계 기능을 제공하며, 분석 API는 그 위에 얇고 보안이 강화된 계층을 형성합니다. 엘라스틱서치 쿼리 및 집계 언어는 예제에서 사용됩니다.
-
쿼리 JSON의 필터 필드에서 사용되는 언어는 엘라스틱서치 쿼리 DSL 문서에 설명되어 있습니다.
-
쿼리 JSON의 집계 필드에서 사용되는 언어는 엘라스틱서치 집계 문서에 완전히 설명되어 있습니다.
인덱스
다양한 유형의 데이터는 서로 다른 인덱스에 존재합니다. 예를 들어, 작업 데이터는 작업 부분 인덱스에 존재하고, 비용 데이터는 비용 인덱스에 존재합니다. 필요한 데이터는 집계 API 엔드포인트 URL에서 인덱스를 지정하여 지정할 수 있습니다.
부모-자식 문서
작업에 대한 정보의 일부는 엘라스틱서치 DB의 두 개의 서로 다른 문서에 존재합니다. 이 문서들은 부모-자식 관계에 있습니다. 예를 들어, 작업의 프로젝트에 대한 정보는 부모 문서에 존재하고, 작업 자체에 대한 정보는 자식 문서에 존재합니다. 필요한 정보에 따라 집계는 데이터 부모-자식 집계 이전 또는 이후에 이루어지지만, 데이터 집계 자체는 모든 쿼리에 존재해야 합니다.
공통 데이터
분석
{
"id": string,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"innerId": number,
"name": string,
"tags": string[],
"trashed": boolean,
"trashedBy": <User>,
"type": string
}
과제
{
"name": string,
"linguist": <User>,
"vendor": <Vendor>
}
제출자 포털
{
"id": string,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": string,
"tags": string[],
"trashed": boolean,
"urlId": string
}
구매자
{
"id": string,
"name": string
}
클라이언트
{
"id": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"externalId": string,
"name": string,
"tags": string[],
"trashed": boolean,
}
CostCenter
{
"id": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": string,
"tags": string[],
"trashed": boolean,
}
도메인
{
"id": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": string,
"tags": string[],
"trashed": boolean
}
Job
{
"id": string,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"extension": string,
"fileName": string,
"groupCount": number,
"innerId": "1",
"languagePair": string,
"lastModified": Date,
"localePair": string,
"sourceLanguage": string,
"sourceLocale": string,
"tags": string[],
"targetLanguage": string,
"targetLocale": string",
"taskId": string,
"trashed": boolean,
"trashedBy": <User>,
"uid": string
}
JobPart
{
"id": "19",
"assignedTo": <Assignment>,
"beginIndex": number,
"buyer": <Buyer>,
"createdBy": <User>,
"dateCreated": Date,
"dateDue": Date,
"endIndex": number,
"groupCount": number,
"innerId": string,
"lastModified": Date,
"level": number,
"status": string,
"tags": [],
"uid": string,
"workflowStep": <WorkflowStep>
}
MtEngine
{
"id": string,
"deleted": boolean,
"default_: boolean,
"includeTags": boolean,
"name": string,
"tags": string[],
"type": string,
}
NetRateScheme
{
"id": string,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"default_": boolean,
"deleted": boolean,
"externalId": string,
"name": string,
"tags": string[],
}
PriceList
{
"id": string,
"createdBy": <User>,
"currency": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"default_": boolean,
"deleted": boolean,
"name": string,
"tags": string[],
"trashed": boolean,
"unit": string
}
프로젝트
{
"id": string,
"buyer": <Buyer>,
"client": <Client>,
"costCenter": <CostCenter>,
"createdBy": <User>,
"dateCreated": Date,
"dateDeleted": Date,
"dateDue": Date,
"dateTrashed": Date,
"deleted": boolean,
"domain": <Domain>,
"innerId": number,
"languagePairs": string[],
"localePairs": string[],
"mtEngine": <MtEngine>,
"name": string,
"note": string,
"owner": <User>,
"sourceLanguage": string,
"sourceLocale": string,
"status": string,
"subDomain": <SubDomain>,
"tags": string[],
"targetLanguages": string[],
"targetLocales": string[],
"trashed": boolean,
"trashedBy": <User>,
"uid": string,
"vendor": <Vendor>
}
견적
{
"id": string,
"createdBy: <User>,
"currency": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"innerId": string,
"name": string,
"status": string,
"tags": string[],
"trashed": boolean,
"trashedBy": <User>,
"unit": string
}
서비스
{
"id": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": string,
"publicName": string,
"tags": string[],
"trashed": boolean,
"type": string
}
SubDomain
{
"id": string,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"name": string,
"tags": string[],
"trashed": boolean
}
사용자
{
"id": number,
"active": boolean,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"email": string,
"firstName": string,
"fullName": string,
"innerId": number,
"jobTitle": string,
"lastName": string,
"locale": string,
"note": string,
"role": string,
"tags": string[],
"timeZone": string,
"trashed": boolean,
"userName": string
}
공급자
{
"id": string,
"candidate": boolean,
"dateCreated": Date,
"dateDeleted": Date,
"dateTrashed": Date,
"deleted": boolean,
"tags": string[],
"token": string,
"trashed": boolean
}
WorkflowStep
{
"id": string,
"abbreviation": string,
"dateDeleted": Date,
"dateTrashed": Date,
"name": string,
"order": number,
"tags": string[],
"trashed": boolean
}
분석 색인
데이터 집계
"data": {
"children": {
"type": "analysisType"
}
}
상위 문서
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
하위 문서
{
"analysis": <Analysis>,
"jobPart": <JobPart>,
"job": <Job>,
"netRateScheme": <NetRateScheme>,
"priority": number,
"data": {
"mt": {
"match0": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match100": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match50": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match75": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match85": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match95": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
}
},
"repetitions": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"tm": {
"match0": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match100": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match101": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match50": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match75": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match85": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
},
"match95": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
}
},
"total": {
"characters": number,
"pages": number,
"percent": number,
"segments": number,
"words": number
}
}
}
API Index
데이터 집계
"data": {
"children": {
"type": "apiType"
}
}
상위 문서
{
"user": <User>
}
하위 문서
{
"request": {
"date": Date,
"host": string,
"ipv4": string,
"ipv6": string,
"location": string,
"method": string
},
"response": {
"date": Date,
"duration": number,
"status": number
},
"api": {
"action": string,
"asynch": boolean,
"type": string,
"uri": string,
"ver": string
}
}
비용 색인
데이터 집계
"data": {
"children": {
"type": "costsType"
}
}
상위 문서
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
하위 문서
{
"analysis": <Analysis>,
"job": <Job>,
"jobPart": <JobPart>,
"netRateScheme": <NetRateScheme>,
"priceList": <PriceList>,
"quote": <Quote>,
"workflowStep": <WorkflowStep>,
"priority": number,
"data": {
"mt": {
"match0": number,
"match100": number,
"match50": number,
"match75": number,
"match85": number,
"match95": number
},
"repetitions": number,
"tm": {
"match0": number,
"match100": number,
"match101": number,
"match50": number,
"match75": number,
"match85": number,
"match95": number
},
"total": number
}
}
jobPart Index
데이터 집계
"data": {
"children": {
"type": "jobPartType"
}
}
상위 문서
{
"automationWidget": <AutomationWidget>,
"project": <Project>,
"service": <Service>
}
하위 문서
{
"job": <Job>,
"jobPart": <JobPart>
"data": {
"counts": {
"chars": {
"total": number,
"confirmed": number,
"notConfirmed": number,
"locked": number,
"notLocked": number,
"confirmedAndLocked": number,
"notConfirmedAndLocked": number,
"completed": number,
"notCompleted": number
},
"groups": {
"total": number
},
"segments": {
"total": number,
"confirmed": number,
"notConfirmed": number,
"locked": number,
"notLocked": number,
"confirmedAndLocked": number,
"notConfirmedAndLocked": number,
"completed": number,
"notCompleted": number,
"mt": {
"postEdited": number,
"관련": 숫자,
"notRelevant": number
},
"qa": {
"checked": number,
"notChecked": number
}
},
"words": {
"total": number,
"confirmed": number,
"notConfirmed": number,
"locked": number,
"notLocked": number,
"confirmedAndLocked": number,
"notConfirmedAndLocked": number,
"completed": number,
"notCompleted": number
},
"qa": {
"warnings": number,
"ignoredWarnings": number,
"notIgnoredWarnings": number
}
}
}
-
HTTP 요청은 Postman에서 실행됩니다.
-
PM 또는 관리자 프로필을 통해 로그인하고, 로그인 API를 사용하여 로그인 토큰을 얻습니다.
-
POST requests to
api/v3/analytics/jobPart?token=<your_login_token>
총 작업 수
문의
{
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
응답
{
"hits": {
"total": 359
},
"aggregations": {
"data": {
"doc_count": 14417
}
}
}
집계 필드 아래에서, 데이터 집계는 문서 수 필드에 표시된 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
}
}
}
버킷 엔티티가 응답에 표시됩니다. 분석 모듈이 데이터를 특정 카테고리로 분할하라는 요청을 받으면, 결과는 버킷 목록으로 표현됩니다. 각 버킷은 이 버킷이 나타내는 데이터(이 경우 대상 언어)를 정의하는 키와 이 데이터 세트의 특정 부분에만 해당하는 값(다른 집계)을 포함합니다.
프로젝트 상태에 따라 나누어진 총 작업 수
문의
{
"aggregations": {
"projectStatus": {
"terms": {
"field": "project.status"
},
"aggs": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
}
}
응답
{
"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": "COMPLETED"
},
{
"doc_count": 1,
"data": {
"doc_count": 4
},
"key": "ASSIGNED"
},
{
"doc_count": 1,
"data": {
"doc_count": 6
},
"key": "DECLINED_BY_VENDOR"
}
]
}
}
}
분석 모듈은 data 집계 전에 프로젝트 상태에 따라 데이터를 분할하도록 지시받았습니다.
새 프로젝트에서의 총 작업 수
문의
{
"filter": {
"term": {
"project.status": "NEW"
}
},
"aggregations": {
"data": {
"children": {
"type": "jobPartType"
}
}
}
}
응답
{
"hits": {
"total": 326
},
"aggregations": {
"data": {
"doc_count": 14318
}
}
}
filter 필드는 문의에 사용됩니다. 이는 후속 집계 전에 데이터를 좁힙니다.