Elasticsearch позволяет пользователям выигрывать аукционы (где ставки пользователей были самыми высокими) - что-то вроде наличия в SQL - PullRequest
1 голос
/ 11 января 2020

Я использую Elasticsearch 6.8.2. Я пытаюсь получить все выигрышные аукционы по user_id = 1. Если я передам user_id = 1, я хочу получить «Аукцион 1», потому что user_id = 1 - самая высокая цена. Я пытался использовать Bucket Selector Aggregation, но не смог заставить его работать из-за вложенного типа do c.

Вот схема и пример данных:

Схема:

{
  "mappings": {
    "_doc": {
      "properties": {
        "bids": {
          "type": "nested"
        }
      }
    }
  }
}

Данные:

{
    "title": "Auction 1",
    "price": 50,
    "bids": [
        {"user_id": 1, "amount": 100},
        {"user_id": 2, "amount": 200},
        {"user_id": 1, "amount": 300}
    ]
},{
    "title": "Auction 2",
    "price": 200,
    "bids": [
        {"user_id": 3, "amount": 300},
        {"user_id": 1, "amount": 400},
        {"user_id": 5, "amount": 500}
    ]
}

И вопрос, который я получил до сих пор:

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "bids",
            "query": {
              "bool": {
                "must": [
                  {
                    "terms": {
                      "bids.user_id": [
                        1
                      ]
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  },
  "sort": [
    {
      "price": "desc"
    }
  ]
}

Пожалуйста, помогите мне, я в отчаянии.

...