0

Я сыпучие документы в elasticsearch и в качестве примера я взял elasticsearch пример документации, так как банки
Агрегация в elasticsearch с определенным параметром

{ 
"_index": "bank", 
"_type": "account", 
"_id": "25", 
"_score": 1, 
"_source": { 
"account_number": 25, 
"balance": 40540, 
"firstname": "Virginia", 
"lastname": "Ayala", 
"age": 39, 
"gender": "F", 
"address": "171 Putnam Avenue", 
"employer": "Filodyne", 
"email": "[email protected]", 
"city": "Nicholson", 
"state": "PA" 
} 
} 
, 
{ 
"_index": "bank", 
"_type": "account", 
"_id": "44", 
"_score": 1, 
"_source": { 
"account_number": 44, 
"balance": 34487, 
"firstname": "Aurelia", 
"lastname": "Harding", 
"age": 37, 
"gender": "M", 
"address": "502 Baycliff Terrace", 
"employer": "Orbalix", 
"email": "[email protected]", 
"city": "Yardville", 
"state": "DE" 
} 
} 
, 
{ 
"_index": "bank", 
"_type": "account", 
"_id": "99", 
"_score": 1, 
"_source": { 
"account_number": 99, 
"balance": 47159, 
"firstname": "Ratliff", 
"lastname": "Heath", 
"age": 39, 
"gender": "F", 
"address": "806 Rockwell Place", 
"employer": "Zappix", 
"email": "[email protected]", 
"city": "Shaft", 
"state": "ND" 
} 
} 
, 
{ 
"_index": "bank", 
"_type": "account", 
"_id": "119", 
"_score": 1, 
"_source": { 
"account_number": 119, 
"balance": 49222, 
"firstname": "Laverne", 
"lastname": "Johnson", 
"age": 28, 
"gender": "F", 
"address": "302 Howard Place", 
"employer": "Senmei", 
"email": "[email protected]", 
"city": "Herlong", 
"state": "DC" 
} 
} 
, 
{ 
"_index": "bank", 
"_type": "account", 
"_id": "126", 
"_score": 1, 
"_source": { 
"account_number": 126, 
"balance": 3607, 
"firstname": "Effie", 
"lastname": "Gates", 
"age": 39, 
"gender": "F", 
"address": "620 National Drive", 
"employer": "Digitalus", 
"email": "[email protected]", 
"city": "Blodgett", 
"state": "MD" 
} 
} 


Теперь есть поле, называемое состояние и цена в каждом документе ,
Как написать запрос, для которого он возвращает только результаты, которые содержат определенное состояние с порядком сортировки в качестве баланса в порядке возрастания.

Я пытался с помощью агрегации терминов, но бесполезно.
UPDATE

POST _search 
{ 
    "size": 0, 
    "aggs": { 
     "states": { 
      "terms": { 
       "field": "state" 
      }, 
      "aggs": { 
       "balances": { 
        "top_hits": { 
         "from" : 0, 
         "size": 1, 
         "sort": {"balance": "asc"} 
        } 
       } 
      } 
     } 
    } 
} 


теперь для этого запроса я буду возвращен со всеми топ-хитов с ценой отсортированных в этом ключ «состояние». Но то, что я хочу, это отсортированные результаты баланса w.r.t и уникальные поля состояния.
Для приведенного выше запроса, я получаю ответ следующим образом

"buckets": [ 
      { 
       "key": "tx", 
       "doc_count": 30, 
       "balances": { 
        "hits": { 
        "total": 30, 
        "max_score": null, 
        "hits": [ 
         { 
          "_index": "bank", 
          "_type": "account", 
          "_id": "161", 
          "_score": null, 
          "_source": { 
           "account_number": 161, 
           "balance": 4659, 
           "firstname": "Doreen", 
           "lastname": "Randall", 
           "age": 37, 
           "gender": "F", 
           "address": "178 Court Street", 
           "employer": "Calcula", 
           "email": "[email protected]", 
           "city": "Belmont", 
           "state": "TX" 
          }, 
          "sort": [ 
           4659 
          ] 
         } 
        ] 
        } 
       } 
      }, 
      { 
       "key": "md", 
       "doc_count": 28, 
       "balances": { 
        "hits": { 
        "total": 28, 
        "max_score": null, 
        "hits": [ 
         { 
          "_index": "bank", 
          "_type": "account", 
          "_id": "527", 
          "_score": null, 
          "_source": { 
           "account_number": 527, 
           "balance": 2028, 
           "firstname": "Carver", 
           "lastname": "Peters", 
           "age": 35, 
           "gender": "M", 
           "address": "816 Victor Road", 
           "employer": "Housedown", 
           "email": "[email protected]", 
           "city": "Nadine", 
           "state": "MD" 
          }, 
          "sort": [ 
           2028 
          ] 
         } 
        ] 
        } 
       } 
      }, 
      { 
       "key": "id", 
       "doc_count": 27, 
       "balances": { 
        "hits": { 
        "total": 27, 
        "max_score": null, 
        "hits": [ 
         { 
          "_index": "bank", 
          "_type": "account", 
          "_id": "402", 
          "_score": null, 
          "_source": { 
           "account_number": 402, 
           "balance": 1282, 
           "firstname": "Pacheco", 
           "lastname": "Rosales", 
           "age": 32, 
           "gender": "M", 
           "address": "538 Pershing Loop", 
           "employer": "Circum", 
           "email": "[email protected]", 
           "city": "Elbert", 
           "state": "ID" 
          }, 
          "sort": [ 
           1282 
          ] 
         } 
        ] 
        } 
       } 
      }, 

, которая не в цене отсортирован.

ответ

0

Попробуйте так:

POST bank/_search 
{ 
    "size": 0, 
    "aggs": { 
     "states": { 
      "terms": { 
       "field": "state", 
       "order": { 
        "balances": "asc" 
       } 
      }, 
      "aggs": { 
       "balances": { 
        "sum": { 
         "field": "balance" 
        } 
       } 
      } 
     } 
    } 
} 

Примечание: Я не вижу price поле, но balance один, может быть, это одна ты имела в виду.

Если вы заинтересованы в получении всех документов от состояния отсортированного по цене, то вы можете попробовать это тоже:

POST bank/_search 
{ 
    "size": 0, 
    "aggs": { 
     "states": { 
      "terms": { 
       "field": "state" 
      }, 
      "aggs": { 
       "balances": { 
        "top_hits": { 
         "size": 5, 
         "sort": {"balance": "asc"} 
        } 
       } 
      } 
     } 
    } 
} 
+0

мне нужны разные значения состояния Но я все еще получаю дубликаты ...! !! – Rockon

+0

Можете ли вы уточнить, какие «дубликаты» вы получаете? Можете ли вы показать в своем вопросе, какой ответ вы ожидаете? – Val

+0

Я не получаю отличные значения , вы можете попробовать этот пример. Его наиболее употребительный пример в документации на eleasticsearch с индексом как банк. Мне нужен мой результат, чтобы содержать различные значения состояния. – Rockon