Как получить все значения различных полей, которые удовлетворяют конкретному запросу в 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"
}
}
}
}