/ / लोचदार खोज - एकत्रीकरण: फ़िल्टरिंग और सॉर्टिंग बाल्टी - जेसन, लोचदार खोज

लोचदार खोज - एकत्रीकरण: फ़िल्टरिंग और सॉर्टिंग बाल्टी - जेसन, लोचदार खोज

लोचदार खोज 5.2 का उपयोग करना

एक उदाहरण के रूप में मैं दुनिया के सभी लोगों का प्रतिनिधित्व करने वाले डेटाबेस का उपयोग करूँगा।

उदाहरण अनुरोध: 30 वर्ष से अधिक उम्र के सभी लोगों के लिए देश द्वारा समूहित व्यक्ति का औसत वेतन प्राप्त करें। (प्रतिक्रिया में उनके औसत वेतन के साथ शीर्ष 10 देशों को शामिल होना चाहिए)

मेरे समेकन क्वेरी को बनाने के लिए मैंने जो कदम उठाए हैं:

  1. कच्चे डेटासेट को फ़िल्टर करें (filter: age > 30)
  2. कुल "country"
  3. क्षेत्र पर मीट्रिक औसत का प्रयोग करें "salary"

जिस समस्या का मैं सामना कर रहा हूं वह यह है कि मैं या तो एकत्र करने से पहले एक फ़िल्टर लागू कर सकता हूं, या बाल्टी को सॉर्ट कर सकता हूं, लेकिन ऐसा लगता है कि ईएस मुझे दोनों को करने की अनुमति नहीं देता है?
दूसरे शब्दों में: मैं अपना "order"पर सवाल"myInnerAggregation"क्योंकि यह पहले से"myFilterAggregation"

GET myIndex/_search
{
"size":0,
"aggs": {
"myAggregation": {
"terms": {
"size":10,
"field": "country",
"order": [
{
"myInnerAggregation": "desc"
// I cannot specify "myInnerAggregation" here, only
// "myFilterAggregation" (because it"s out of scope I guess)
}
]
},
"aggs": {
"myFilterAggregation": {
"filter": { /* age > 30 (filter syntax is not the problem)*/},
"aggs": {
"myInnerAggergation": {
"avg": {
"field": "salary"
}
}
}
}
}
}

} }

मैंने देखा है कि ES 6.1+ के लिए समर्थन है "bucket_sort", जो शायद इस समस्या को हल करेगा, लेकिन मुझे विश्वास नहीं है कि इस तरह के एक साधारण एकत्रीकरण को ES 5.2 द्वारा नियंत्रित नहीं किया जा सकता है?

उत्तर:

जवाब के लिए 0 № 1

यह काम कर जाना चाहिए:

"order": [
{
"MyFilterAggregation>MyInnerAggregation": "desc"
}
]

जवाब के लिए 0 № 2

फ़िल्टर को ले जाने का प्रयास करें query अनुरोध का हिस्सा आपको अपने फ़िल्टर को एकत्रीकरण के रूप में घोषित करने की आवश्यकता नहीं है, जिसमें वर्गीकरण सम्मान फ़िल्टर शामिल हैं query आपके अनुरोध का हिस्सा उम्मीद है कि इस तरह आप अपने मुद्दे के आसपास हो सकते हैं।