Сценарии Python в Кибане для Elastisearch - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь создать скриптовые поля в Elastisearch из управления индексами Kibana.Но язык слишком сложен, чтобы справиться: безболезненно.Я знаком с питоном.Я полагаю, что можно создавать сценарии для полей с использованием языка Python в elastisearch 6.6 и выше

Я пытаюсь установить новый столбец: Состояние, значение которого будет неактивным, если завершенная дата меньше текущей даты, в противном случае

Отображение приведено ниже:

{
  "mapping": {
    "atlassian": {
      "properties": {
        "Fields": {
          "properties": {
            "Sprints": {
              "properties": {
                "completeDate": {
                  "type": "date"
                },
                "endDate": {
                  "type": "date"
                },
                "name": {
                  "type": "text",
                  "fields": {
                    "keyword": {
                      "type": "keyword",
                      "ignore_above": 256
                    }
                  }
                },
                "startDate": {
                  "type": "date"
                }
              }
            }

...

Документ выглядит так, как показано ниже в табличном представлении:

?  Fields.Sprints            
 {
  "endDate": "2019-01-29T00:30:00.000Z",
  "name": "XXX - sprint 21",
  "startDate": "2019-01-09T15:51:49.104Z",
  "completeDate": "2019-01-28T22:50:19.411Z"
}

Приведенное выше поле анализирует массив словарей, содержащих много информации о спринте.Но в табличном представлении он выглядит как один вложенный словарь.

Документ в представлении JSON выглядит следующим образом:

{
  "_index": "jira_addon_index",
  "_type": "atlassian",
  "_id": "452",
  "_version": 2,
  "_score": 0,
  "_source": {
    "Fields": {
      "summary": "[XXXX - JIRA Exception Report] Project does not exist for the items present in Stories without Sprints Panel",
      "issuetype": {
        "name": "Bug"
      },
      "Sprints": [
        {
          "endDate": "2019-01-29T00:30:00.000Z",
          "name": "XXX - sprint 21",
          "startDate": "2019-01-09T15:51:49.104Z",
          "completeDate": "2019-01-28T22:50:19.411Z"
        }
      ],
      "components": null,
      "customfield_12094": null,
      "created": "2019-01-07T19:32:55.826+0800",

...

Я попытался создать новое поле из инструментов dev, а такжеиз скриптовой утилиты полей в управлении индексами

DEV TOOLS

POST jira_addon_index/_update_by_query
{
  "query": {
      "range": {
      "Fields.Sprints.endDate": {
        "lt": "now/d"
      }
    }
  },
  "script": {
    "lang": "painless",
    "source": """
      ctx._source.Fields.Sprints.add(params.StatusTwo)
    """,
    "params": {
      "StatusOne":"Active",
      "StatusTwo":"Closed"
    }
  }
}


Приведенный выше код создает новое поле в родительском JSON, тогда как я хочу добавить новое поле "Статус: внутри словаря внутри [Поля] [Спринты]

Утилита управления индексами

long timestampLog = doc['Fields.Sprints.completeDate'].value.getMillis();

long timestampNow = new Date().getTime();

if (timestampLog < timestampNow ) { 
return "INACTIVE"
} else {
return "ACTIVE"
}

Как создать новые столбцы в словаре спринтов.использовать язык PYTHON для написания сценариев?

Какие-нибудь онлайн-руководства для понимания запросов, кроме официальной документации?

...