Adjacency matrix 집계
Adjacency matrix 집계
adjacency_matrix 집계는 이름 붙은 필터 집합을 받아, 서로 교차하는 필터의 모든 쌍을 나타내는 버킷을 반환해요. 각 버킷의 문서 개수는 두 필터를 동시에 충족한 문서 수를 나타내므로, 서로 다른 문서 그룹 간의 관계를 분석하는 데 유용해요.
출처: 문서
본문
A, B, C라는 세 개의 필터가 주어지면, 응답은 다음과 같은 버킷 구조를 만들어요:
A B C
A A A&B A&C
B B B&C
C C
행렬은 대칭이에요. 즉 A&C 버킷에 포함된 문서는 C&A와 동일하므로, 상부 삼각(upper triangle)만 반환돼요. 필터 이름은 알파벳 순으로 정렬되고, 먼저 오는 이름이 항상 & 구분자의 왼쪽에 위치해요.
파라미터 (Parameters)
adjacency_matrix 집계는 다음 파라미터를 받아요.
| 파라미터 | 필수/선택 | 데이터 타입 | 설명 |
|---|---|---|---|
| filters | 필수 | Object | 키-값 쌍으로 표현된 이름 붙은 필터 집합. 각 키는 필터 이름이고 각 값은 쿼리 객체예요. |
| separator | 선택 | String | 교차 버킷 키에서 필터 이름을 연결하는 데 쓰는 문자예요. 기본값은 &예요. |
예제 (Example)
다음 예제는 전자상거래 데이터셋을 분석해 세 제조업체의 제품이 같은 주문에 얼마나 자주 함께 등장하는지 확인해요:
GET /opensearch_dashboards_sample_data_ecommerce/_search
{
"size": 0,
"aggs": {
"interactions": {
"adjacency_matrix": {
"filters": {
"grpA": {
"match": {
"manufacturer.keyword": "Low Tide Media"
}
},
"grpB": {
"match": {
"manufacturer.keyword": "Elitelligence"
}
},
"grpC": {
"match": {
"manufacturer.keyword": "Oceanavigations"
}
}
}
}
}
}
}
예제 응답 (Example response)
{
"took": 32,
"timed_out": false,
"terminated_early": true,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 4675,
"relation": "eq"
},
"max_score": null,
"hits": []
},
"aggregations": {
"interactions": {
"buckets": [
{
"key": "grpA",
"doc_count": 1553
},
{
"key": "grpA&grpB",
"doc_count": 590
},
{
"key": "grpA&grpC",
"doc_count": 329
},
{
"key": "grpB",
"doc_count": 1370
},
{
"key": "grpB&grpC",
"doc_count": 299
},
{
"key": "grpC",
"doc_count": 1218
}
]
}
}
}
doc_count가 590인 교차 버킷 grpA&grpB는 590개의 주문이 Low Tide Media와 Elitelligence 두 제조업체의 제품을 모두 포함한다는 뜻이에요.
하위 집계와 함께 사용하기 (Usage with child aggregations)
adjacency_matrix 안에 date_histogram 같은 하위 집계를 중첩하면 관계 데이터에 시간 차원이 추가돼요. 이를 통해 그룹 간 상호작용이 시간에 따라 어떻게 진화하는지 관찰할 수 있는 동적 네트워크 분석을 수행할 수 있어요.
일치하는 문서가 없는 교차 버킷은 응답에서 생략돼요.
응답 본문 필드 (Response body fields)
| 필드 | 데이터 타입 | 설명 |
|---|---|---|
| buckets | Array | 개별 필터와 그 쌍별 교차를 나타내는 버킷 목록이에요. |
| buckets.key | String | 개별 필터 버킷의 필터 이름. 또는 교차 버킷에서 separator로 연결된 두 필터 이름이에요. |
| buckets.doc_count | Integer | 필터 또는 필터 쌍과 일치하는 문서 수예요. |
제한 사항 (Limitations)
버킷 수는 필터 수에 따라 제곱으로 증가해요. N개의 필터가 있으면 최대 N(N+1)/2개의 버킷이 생성돼요 (N개의 개별 버킷 + N*(N-1)/2개의 교차 버킷). 과도한 메모리 사용을 막기 위해 필터의 최대 개수 기본값은 100이에요. 이 제한은 인덱스별로 index.max_adjacency_matrix_filters 설정으로 조정할 수 있어요.
관련 문서 (Related documentation)
OpenSearch Dashboards에서 adjacency matrix 결과를 네트워크 그래프로 렌더링하는 완전한 예제는 Vega 시각화 만들기 항목을 참고하세요.