Я пытаюсь создать скриптовые поля в 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 для написания сценариев?
Какие-нибудь онлайн-руководства для понимания запросов, кроме официальной документации?