Существует ли функция Group BY для поиска результата с помощью эластичного поискового запроса? - PullRequest
0 голосов
/ 03 июня 2019

Я попытался объединить группу с помощью упругого поиска.Но я не получил ответ правильно.Пожалуйста, поддержите меня, чтобы исправить эту проблему.Индексированные данные:

data = [
       { "fruit":"apple", "taste":5, "timestamp":100},
       { "fruit":"pear", "taste":5, "timestamp":110},
       { "fruit":"apple", "taste":4, "timestamp":200},
       { "fruit":"pear", "taste":8, "timestamp":90},
       { "fruit":"banana", "taste":5, "timestamp":100}]`
My query is, 
`myQuery = {"query": {
      "match_all": {}
    },
    "aggs": {
      "group_by_fruit": {
        "terms": {
          "field": "fruit.keyword"
        },
      }
    }
    }

Показывает все 5 данных в выводе.На самом деле мне нужно получить только 3 записи.Ожидаемый результат:

[
   { "fruit":"apple", "taste":4, "timestamp":200},
   { "fruit":"pear", "taste":8, "timestamp":90},
   { "fruit":"banana", "taste":5, "timestamp":100}]

1 Ответ

0 голосов
/ 03 июня 2019

Если вы хотите получить документы с различными полями фруктов, имеющими наибольшее значение отметка времени , вам следует использовать агрегацию top_hits .

{
    "query": {
      "match_all": {}
    },
    "size": 0,
    "aggs": {
        "top_tags": {
            "terms": {
                "field": "fruit.keyword",
                "size": <MAX_NUMBER_OF_DISTINCT_FRUITS>
            },
            "aggs": {
                "group_by_fruit": {
                    "top_hits": {
                        "sort": [
                            {
                                "timestamp": {
                                    "order": "desc"
                                }
                            }
                        ],
                        "size" : 1
                    }
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...