Проверка Elasticsearch ключ существует в объекте
Мое частичное отображение для одного из индексов:
{
"title": { "type": "string"},
"seasons": {
"type": "object",
"dynamic": true,
"properties": {}
}
}
В настоящее время у меня есть 4 документа:
Док 1
{
"title": "abc",
"seasons": null
}
Док 2
{
"title": "xyz",
"seasons": {
"201809": 23,
"201902": 45
}
}
Док 3
{
"title": "xyz",
"seasons": {
"201811": 23,
"201910": 23,
"201809": 45,
"201805": 35,
}
}
Док 4
{
"title": "xyz",
"seasons": {
"201802": 23,
"201902": 45
}
}
seasons
объект всегда будет либо null
или будет иметь key=>val
пара.
Я хочу найти все документы, которые имеют season
поле с ключом 201809
(здесь можно указать doc2 и doc3), а затем продолжить работу над документом.
ТРЕБОВАНИЕ - Мне нужно запустить этот поиск только с использованием скриптов Groovy. И в моем отличном сценарии у меня есть:
if (doc["seasons.201809"].value) {
....more processing after finding the document.....
}
Но за эту проверку я получаю "TransportError(500, 'search_phase_execution_exception', 'no_class_def_found_error: java/lang/Throwable')"
, Я уверен, что эта строка не правильная проверка
if (doc["seasons.201809"].value) {
Может кто-нибудь дать мне знать, как решить эту проблему проверки существования ключа?
1 ответ
Для части Groovy вы можете сделать следующее:
// (1) More verbose approach
if (doc.containsKey('seasons') && doc.seasons.containsKey('201802')) {
println "Key seasons.201802 exists!"
}
или же:
// (2) Shorter version
if (doc?.seasons?.containsKey('201802')) {
println "Key seasons.201802 exists!"
}
И вот немного Groovy полный образец:
import groovy.json.JsonSlurper
String json = '''{
"title": "xyz",
"seasons": {
"201802": 23,
"201902": 45
}
}'''
Map doc = new JsonSlurper().parseText(json)
// (1) More verbose approach
if (doc.containsKey('seasons') && doc.seasons.containsKey('201802')) {
println "(1) Key seasons.201802 exists!"
}
// (2) Shorter version
if (doc?.seasons?.containsKey('201802')) {
println "(2) Key seasons.201802 exists!"
}
Выход
(1) Key seasons.201802 exists!
(2) Key seasons.201802 exists!