집계를보고 있었고 painless
을 사용하여 스크립팅을 수행 한 결과, 모든 값을 반복/합산하는 방법을 알 수 없습니다. 목적.ElasticSearch/Painless : 개체의 모든 값을 액세스/합계하는 방법
예 :
내 매핑
"field1": {
"properties": {
"subfield1": {
"type": "float"
},
"subfield2": {
"type": "float"
},
"subfield3": {
"type": "float"
}
}
}
같은 것은의 내 데이터는 다음과 같습니다 가정 해 봅시다 같습니다
{
"field1" : {
"subfield1": 50.0,
"subfield2": 20.5,
"subfield3": 30.5
}
}
나는 기본적으로 50.0 + 20.5 + 30.5
에 범위 쿼리를 수행 할, 또는, 어떤 식 으로든 field1
개체 내의 모든 값에 액세스하십시오.
집계를 통해 필드에 와일드 카드를 사용할 수 없습니다. 나는 (통증이 없도록 내부적으로 사용 된) looking at the code for LeafDocLookup
이었고, 관련 방법이 사용 중지 된 것을 확인했습니다.
나는이 같은 스크립트를 작성 관리했습니다 :
"query": {
"script": {
"script": {
"inline": "return (doc['field1.subfield1'].value + doc['field1.subfield2'].value + doc['field1.subfield3'].value > 50);",
"lang": "painless"
}
}
}
그러나 이것은 분명히 서브 최적이며, 동적 키의 주요 문제가 해결되지 않습니다.
당신이 하위 키의 총 (즉, 합계)를 저장할 수 있습니다 사용하는 경우
그래서, 자바
HashMap
개체로 개체에 액세스 할 수 있습니까? 그렇다면 쿼리 할 필드가 하나 뿐이므로 동적 키 이름에 대해 걱정할 필요가 없습니다. – Phil할 수 있지만, 해시 맵의 모든 요소에 액세스해야하는 경우가 더 많습니다. 정확하게'keySet()'과'values ()'와 같은 메소드가있는 이유는 무엇입니까? – shashwat
Painless는 필드의 모든 하위 객체를 가져 오는 것을 지원하지만 일반적으로 ES 쿼리에서 스크립트를 사용하지 않는 것이 좋습니다. 속도가 느리고 일반적으로 스크립트를 피하기 위해 문서를 쿼리하거나 저장하는 더 좋은 방법이 있습니다. – Phil