Это мой первый вопрос по StackOverflow !!
Я застрял в Elasticsearch, поэтому искал помощи.
Вот моя проблема.
У меня есть список людей, имеющих значение WIN или LOST для некоторых событий
ввод:
|name | result | event|
------------------------
|Marc | WIN | game1|
|Marc | WIN | game2|
|Gabe | WIN | game1|
|James | WIN | game1|
|James | LOST | game2|
|John | LOST | game1|
|John | LOST | game2|
Допустим, код выше представляет мои данные.
Я хочу получить 3 запроса.
- 1, дающий мне игроков, всегда побеждающих (идеальные победители)
- 1 дает игрокам всегда проигрывать (идеальные проигравшие)
- 1 дает игрокам возможность выполнять оба (сбалансировано)
Первый запрос на возвращение Марка и Гейба, двух игроков, которые никогда не проигрывали:
{
"name": "Marc"
},
{
"name": "Gabe"
}
Вторая просьба вернуть Джеймса, потому что он проиграл игру и выиграл другую:
{
"name": "James"
}
Третий запрос, возвращающий Джона, который проигрывал каждую игру (думаю, он плохой):
{
"name": "John"
}
Я попробовал несколько вещей, но потерпел неудачу. Вот мои попытки:
Я попытался выполнить агрегацию по Имени и отфильтровал (в сегменте 'must') результаты WIN или LOST, но игроки, у которых есть WIN и LOST, вызывают у меня проблемы, потому что они появляются в наборах победителей и проигравших.
Я хотел сделать объединение между игроками, имеющими WIN, и игроками, имеющими LOST, чтобы получить набор игроков, имеющих WIN и LOST, или исключить один набор из другого и получить игроков, имеющих только WIN или только LOST, но это способ SQL мышления. Это не решение Elasticsearch, и синтаксис не позволяет этого делать (к сожалению, мне не удается обойтись без наборов игроков)
Другое решение состоит в том, чтобы создать один запрос, отображающий тип проигрывателя (WINNER, LOSER, MID), а затем применить фильтр для выбора только нужного типа, но субагрегации доставили мне затруднения, и я полностью потерпел неудачу. на этом пути (если у вас есть решение, было бы здорово).
Наконец, решение будет состоять в том, чтобы отображать номера WIN и номера LOST для каждого игрока (и я выполнил запрос), но это не совсем то, что я хочу, потому что победители, проигравшие и середина расплавлены.
GET /_search
{
"size": 0,
"query": {
"bool" : {
"must": [],
"filter": {
"range": {
"@timestamp": {
"lte": "30/08/2018",
"gte": "27/06/2018",
"format": "dd/MM/yyyy"
}
}
}
}
},
"aggs" : {
"my_buckets": {
"terms": {
"field": "name.keyword",
"size": 20
},
"aggs": {
"GroupByType": {
"terms": {
"field": "result.keyword",
"size": 100
}
}
}
}
}
}
Возможно, фильтр для получения результатов, имеющий счетчик WIN> 0 и счетчик LOST == 0, мог бы сделать эту работу, но я не нашел правильный синтаксис для такой вещи.
Так что у меня заканчиваются идеи, и я прыгал, чтобы найти какую-то помощь здесь.
Заранее спасибо.
И не стесняйтесь спрашивать меня больше деталей, если я не был достаточно ясен.