Я хотел бы создать поле со сценарием, которое проверяет два свойства вложенного поля.
У меня есть индекс ES, который содержит информацию о процессах.Процесс настроен как вложенный объект .Каждый документ может иметь более одного процесса.Также возможно иметь более одного процесса одного типа (один и тот же processDefinitionKey ).
Вот как в данный момент структурированы процессы:
"process" : {
"type" : "nested",
"include_in_parent" : true,
"properties" : {
"created" : {
"type" : "date",
"format" : "date_optional_time"
},
"ended" : {
"type" : "date",
"format" : "date_optional_time"
},
"id" : {
"type" : "text",
"index" : false
},
"processDefinitionKey" : {
"type" : "keyword"
},
"processDefinitionName" : {
"type" : "text",
"fields" : {
"raw" : {
"type" : "keyword",
"index" : false
}
},
"analyzer" : "case_insensitive_sort"
}
}
}
Сейчас меня интересуют все активные процессы определенного вида.Таким образом, они должны иметь определенное processDefinitionKey
и , а не иметь свойство ended
.Я написал для него запрос ES:
{
"query": {
"nested": {
"path": "process",
"query": {
"bool": {
"must": {
"match": {
"process.processDefinitionKey": "service_agreement"
}
},
"must_not": {
"exists": {
"field": "process.ended"
}
}
}
}
}
}
}
Я добавил этот запрос в качестве фильтра, который я могу использовать на инструментальных панелях Kibana.Я думаю, что он работает так, как и должен.
Однако я бы предпочел добавить это свойство «имеет активный процесс такого рода» в качестве столбца в таблице поиска, создав сценарий поля для этого.Это поле со сценарием, которое я придумал (безболезненно):
doc['process.processDefinitionKey'].contains('service_agreement') && doc['process.ended'].empty
Но результаты здесь не совпадают с запросом выше.Я боюсь, что этот скрипт проверяет, существует ли процесс с правильным процессом processDefinitionKey
и a без свойства ended
.Но он не проверяет, являются ли оба свойства истинными для одного и того же процесса.
Как убедиться, что в скриптовом поле проверяются свойства processDefinitionKey
и ended
одного и того же процесса?
Я использую Kibana 6.4.2
РЕДАКТИРОВАТЬ:
Пример документа, где поле сценария должно возвращаться true
(процесс service_agreement еще не закончился,другой процесс имеет):
{
"_index": ...,
"_type"...,
"_id": ...,
"_version": ...,
"_score": ...,
"_source": {
"type": ...,
...,
"process": [
{
"id": "130707",
"created": "2017-09-11T09:50:52.000+02:00",
"ended": "2017-09-13T10:16:43.000+02:00",
"processDefinitionKey": "so_ondertekenproces",
"processDefinitionName": "Samenwerkingsovereenkomst",
"incidents": []
},
{
"id": "c2a83c07-15f7-11e7-a20e-0242ac120004",
"created": "2017-03-31T11:52:32.000+02:00",
"processDefinitionKey": "service_agreement",
"processDefinitionName": "Service Agreement",
"incidents": []
}
]
},
"fields": {
"process.created": [
"2017-03-31T09:52:32.000Z",
"2017-09-11T07:50:52.000Z"
],
"process.ended": [
"2017-09-13T08:16:43.000Z"
]
}
}
Пример документа, в котором поле сценария должно возвращать false
:
{
"_index": ...,
"_type": ...,
"_id": ...,
"_score": ...,
"_source": {
"type": ...,
...,
"process": [
{
"id": "17154",
"created": "2017-05-24T13:21:40.000+02:00",
"ended": "2017-05-24T13:23:24.000+02:00",
"processDefinitionKey": "so_ondertekenproces",
"processDefinitionName": "Samenwerkingsovereenkomst",
"incidents": []
},
{
"id": "17263",
"created": "2017-05-24T13:23:29.000+02:00",
"ended": "2017-09-27T14:31:00.000+02:00",
"processDefinitionKey": "so_ondertekenproces",
"processDefinitionName": "Samenwerkingsovereenkomst",
"incidents": []
},
{
"id": "f1cd056e-15f7-11e7-a20e-0242ac120004",
"created": "2017-03-31T11:53:51.000+02:00",
"ended": "2017-10-10T11:35:47.000+02:00",
"processDefinitionKey": "service_agreement",
"processDefinitionName": "Service Agreement",
"incidents": []
}
]
},
"fields": {
"process.created": [
"2017-03-31T09:53:51.000Z",
"2017-05-24T11:21:40.000Z",
"2017-05-24T11:23:29.000Z"
],
"process.ended": [
"2017-05-24T11:23:24.000Z",
"2017-09-27T12:31:00.000Z",
"2017-10-10T09:35:47.000Z"
]
}
}