Эластичный поисковый фильтр по хитам - PullRequest
0 голосов
/ 27 октября 2018

У меня есть данные в ES, как показано ниже. Я хочу, чтобы в наборе результатов имелось подразделение 1, поэтому должны отображаться только местоположения 55 и 60, в то время как объем продаж по районам должен составлять всего $ 550. Есть идеи, как этого добиться. Цените много!

DivNbr | Район | Locn | Продажи

1 | 616 | 55 | $ 100

2 | 616 | 61 | $ 200

1 | 616 | 60 | $ 250
{
"size": 0,
"aggs": {
  "by_district_id": {
    "terms": {
      "field": "district"
   },
  "aggs": {
      "top_session_hits": {
        "top_hits": {
          "_source": {
            "includes": [
              "locn",
              "sales"
             ]
          }
       }
      },
      "dist_sls": {
        "sum": {
          "field": "sales"
        }
      }
   }
  }
}

}

1 Ответ

0 голосов
/ 27 октября 2018

Вы можете добавить Фильтр агрегации , чтобы получить результаты только с division 1.

Ниже приведен запрос и его пример ответа

Запрос запроса

POST <your_index_name>/_search
{  
   "size":0,
   "aggs":{  
      "by_district_id":{  
         "terms":{  
            "field":"district"
         },
         "aggs":{  
            "filter_agg":{  
               "filter":{  
                  "term":{  
                     "divnbr":"1"
                  }
               },
               "aggs":{  
                  "top_session_hits":{  
                     "top_hits":{  
                        "_source":{  
                           "includes":[  
                              "locn",
                              "sales"
                           ]
                        }
                     }
                  }
               }
            },
            "dist_sls":{  
               "sum":{  
                  "field":"sales"
               }
            }
         }
      }
   }
}

Ответ

{
  "took": 49,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 3,
    "max_score": 0,
    "hits": []
  },
  "aggregations": {
    "by_district_id": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "616",
          "doc_count": 3,
          "dist_sls": {
            "value": 550
          },
          "filter_agg": {
            "doc_count": 2,
            "top_session_hits": {
              "hits": {
                "total": 2,
                "max_score": 1,
                "hits": [
                  {
                    "_index": "sampleindex",
                    "_type": "mydocs",
                    "_id": "1",
                    "_score": 1,
                    "_source": {
                      "sales": 100
                    }
                  },
                  {
                    "_index": "sampleindex",
                    "_type": "mydocs",
                    "_id": "3",
                    "_score": 1,
                    "_source": {
                      "sales": 250
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

Дайте мне знать, если это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...