현재 mtermvectors 쿼리를 이용해서 단어별 점수 합계를 구하는 작업을 진행 중입니다.
- mtermvectors 결과 확인
- 결과를 새로운 인덱스에 저장(nested 형태로 변경)
- 새로운 인덱스를 가져와서 어그리게이션 작업
위의 세 가지 작업을 하나의 쿼리만으로 동시에 할 수 있나요?
현재 제 쿼리 같이 올립니다.
세 단계로 나누어진 작업을 한 단계로 줄이고 싶어요.
-
mtermvectors query
GET /_mtermvectors?pretty=true
{
"docs":[
{
"_index": "je_test",
"_type": "je_tweet",
"_id": "2",
"fields":["contents"],
"offsets":false,
"payloads":false,
"positions":false,
"term_statistics": true,
"field_statistics":true,
"filter":{
"min_term_freq":1,
"max_doc_freq": 3
}
},
{
"_index": "je_test",
"_type": "je_tweet",
"_id": "1",
"fields":["contents"],
"offsets":false,
"payloads":false,
"positions":false,
"term_statistics": true,
"field_statistics":true,
"filter":{
"min_term_freq":1,
"max_doc_freq": 3
}
}
]
} -
검색 결과 저장할 인덱스 맵핑
PUT ok_index
{
"mappings": {
"word": {
"properties": {
"termsarray": {
"type": "nested",
"properties": {
"form": {
"type":"text",
"fielddata": true
}
}
}
}
}
}
} -
어그리게이션 사용해서 단어별 점수 구하기
GET ok_index/_search
{
"aggs" : {
"termsarray" : {
"nested" : {
"path" : "termsarray"
},
"aggs" : {
"word" : {
"terms" : {
"field" : "termsarray.form",
"order" : { "sum_score" : "desc" }
},
"aggs" : {
"sum_score" : { "sum" : { "field" : "termsarray.score" }}
}
}
}
}
}
}