Сумма значений двух полей в индексе Elasticsearch как одного поля с использованием запроса - PullRequest
0 голосов
/ 31 января 2019

ES index:

{
  "_index": "test1",
  "_type": "logs",
  "_id": "0mRtoGgBnyB5Q6tBVGHK",
  "_version": 1,
  "_score": null,
  "_source": {
    "spread": 0,
    "Class": "match",
    "price": 0.2,
    "qty": 3,
    "Id": 1
  }
  }

Это документ в моем индексе Elasticsearch.Мне нужно получить сумму цены и кол-во для каждого документа в результате запроса к индексу.

1 Ответ

0 голосов
/ 31 января 2019

Вы можете использовать Поля скрипта , которые будут возвращать оценку скрипта (на основе разных полей) для каждого попадания

Попробуйте что-то вроде ниже:

GET test1/_search
{
    "query" : {
        "match_all": {}
    },
    "script_fields" : {
        "totalcost" : {
            "script" : {
                "lang": "painless",
                "source": "doc['price'].value * doc['qty'].value"
            }
        },
        "sumpriceandqty" : {
            "script" : {
                "lang": "painless",
                "source": "doc['price'].value + doc['qty'].value"                   
            }
        }
    }
}

РЕДАКТИРОВАТЬ: Обновленное имя индекса

Я проверил его на локальном, он работает, вот вывод:

{
  "took": 67,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 1,
    "hits": [
      {
        "_index": "test1",
        "_type": "doc",
        "_id": "_xEopmgBbjdm4NNpj-tl",
        "_score": 1,
        "fields": {
          "sumpriceandqty": [
            3.2000000029802322
          ],
          "totalcost": [
            0.6000000089406967
          ]
        }
      }
    ]
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...