Как получить все значения различных полей, которые удовлетворяют конкретному запросу в Elasticsearch?

Мой образец документа выглядит следующим образом.

{
    "user": "dslfjd",
    "productLength": 68,
    "productPrice": 4500,
    "action": "Made Purchse"
}

Я хочу получить всех пользователей, которые принесли продукты, цена которых составляет от 4000 до 10000, а длина - от 50 до 100. Следующий запрос возвращает все документы, которые удовлетворяют вышеуказанным условиям.

{
   "query": {
       "bool": {
           "must": [
               {
                   "term": {
                       "act": "Made Purchase"
                   }
               },
               {
                   "range": {
                       "productPrice": {
                           "gte": 4000,
                           "lte": 10000
                       }
                   }
               },
               {
                   "range": {
                       "length": {
                           "gte": 50,
                           "lte": 100
                       }
                   }
               }
           ]
       }
   }
}

Здесь я получу все документы, которые удовлетворяют вышеуказанным условиям запроса, я даже могу спроецировать свой ответ, просто указав "_source" = ["user"] чтобы я не получил весь документ, а только user

Вместо этого я хочу получить список всех уникальных пользователей. Вместо всех документов, которые могут иметь user поле повторяется.

Агрегация как ниже

{
    "aggs": {
        "unique_users": {
            "terms": {
                "field": "user"
            }
        }
    }
}

агрегирует все документы, вместо этого я хочу агрегировать документы, которые удовлетворяют любому запросу. Я чувствую, что упускаю простую вещь, такую ​​как определение моего запроса в моей агрегации. Но я не знаю что это.

1 ответ

Решение

Это слишком просто, или вам нужно что-то еще из того, что вы описали:

GET /some_index/some_type/_search?search_type=count
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "action": "Made Purchase"
          }
        },
        {
          "range": {
            "productPrice": {
              "gte": 4000,
              "lte": 10000
            }
          }
        },
        {
          "range": {
            "productLength": {
              "gte": 50,
              "lte": 100
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "unique_users": {
      "terms": {
        "field": "user"
      }
    }
  }
}
Другие вопросы по тегам