Elasticsearch에서 배타적 인 버킷 집합을 작성해야합니다 (즉, 필터가 겹칠 수 있으므로 모든 버킷이 아닌 모든 버킷이 아니라 기준을 충족하기 위해 FIRST 버킷에 문서가 할당됩니다. 이는 CASE WHEN THEN과 같은 동작입니다. SQL 환경에서의 ELSE). 현재 과 결합 된 Filters Aggregation을 사용하여 원하는 것을 얻고 있습니다. 아이디어는 "Bool Query"의 "must"와 "must_not"부분을 "must"가 필자의 필터이고 "must_not"이 이미 이전에 사용 된 다른 모든 필터들의 집합 인 경우 사용하는 것입니다. 예제는 다음과 같습니다 관계형 접근 방식에서 빠른 탄력적 인 검색 그렇다면 그 이상입니까?
GET _search
{
"query":{"match_all":{}},
"size":0,
"aggs":{
"bin_1": {
"filter": {
"bool": {
"must": { <filter1> },
"must_not": { <empty> }
}
}
},
"bin_2": {
"filter": {
"bool": {
"must": { <filter2> },
"must_not": { <filter1> }
}
}
},
"bin_3": {
"filter": {
"bool": {
"must": { <filter3> },
"must_not": { <filter1>, <filter2> }
}
}
},
"bin_else": {
"filter": {
"bool": {
"must": { <empty> },
"must_not": { <filter1>, <filter2>, <filter3> }
}
}
}
}
}
는 같은 때 절과 같이 케이스에 의해 달성 될 수 :
CASE WHEN <filter1> THEN <bin_1>
WHEN <filter2> THEN <bin_2>
WHEN <filter3> THEN <bin_3>
ELSE <bin_else>
END
이 방법의 문제는 느린 느린 얻을 수 있다는 것입니다 더 많은 양동이를 추가합니다 (내 실제 경우에는 중첩 된 양동이가 있음). Elastic에서 이와 같은 배타적 인 버킷에 대한 언어 지원이 있습니까? 또는 동일한 결과를 얻을 수있는 다른 빠른 접근 방법?
감사합니다.
스크립팅 된 필드를 사용하지 않을 것입니다! 굉장한 아이디어, 당신에게 @Honza 감사합니다. 그래도 성능에 대해 알고 있습니까? 필자는 스크립트 필드가 일반적인'bool' 필터와 비교할 때 상당히 비싸다고 생각합니다. –