Мне нужно удалить поле из результатов поиска в Elasticsearch. Я хочу удалить свойство detail
, если display_detail
равно False.
пример документов:
{
"last_name" : "anna",
"first_name" : "bella",
"detail" : "descript their hobby",
"display_detail" : true
},
{
"last_name" : "anna",
"first_name" : "michelle",
"detail" : "another hobby",
"display_detail" : false
}
это запрос выглядит так:
indexname=indexname
query = {
"query_string" : {
"query" : anna,
"fields: : ["first_name","last_name"]
}
}
results = es.search(index=indexname, query=query , source = ["first_name","last_name","detail"])
что я ожидаю:
{
"last_name" : "anna",
"first_name" : "bella",
"detail" : "descript their hobby",
},
{
"last_name" : "anna",
"first_name" : "michelle",
}
Я могу получить результаты выше после получения результатов поиска следующим образом:
for element in results['hits']['hits']:
if element["display_detail"] == "true":
del element['detail']
json.append(element)
это хороший способ справиться с этим? или есть ли шанс, что я смогу получить более быстрый/чистый способ с помощью эластичного запроса?
Если у вас есть список диктов, вы можете удалить элементы из диктовок с помощью pop.
Вот как это сделать:
ld = [
{
"last_name" : "anna",
"first_name" : "bella",
"detail" : "descript their hobby",
"display_detail" : True
},
{
"last_name" : "anna",
"first_name" : "michelle",
"detail" : "another hobby",
"display_detail" : False
}
]
print('before removing:')
print(ld)
for i in ld:
if i['display_detail']==False:
i.pop('detail')
print('after removing:')
print(ld)
И вот результат:
before removing:
[{'last_name': 'anna', 'first_name': 'bella', 'detail': 'descript their hobby', 'display_detail': True}, {'last_name': 'anna', 'first_name': 'michelle', 'detail': 'another hobby', 'display_detail': False}]
after removing:
[{'last_name': 'anna', 'first_name': 'bella', 'detail': 'descript their hobby', 'display_detail': True}, {'last_name': 'anna', 'first_name': 'michelle', 'display_detail': False}]
хорошо, это было так же легко сделать с одним дополнительным оператором if
внутри цикла. Я изменил ответ соответственно, поэтому удовлетворите вопрос.
Невозможно выбрать/скрыть поля на основе условия.
Однако вы можете выбрать/скрыть поля, используя параметры полей или параметры источника из всех документов.
Всегда рекомендуется обрабатывать такие микрооперации на стороне клиента так же, как и вы.
хорошо, спасибо, чтобы прояснить эту проблему.
Отметьте это решенным, если вы найдете ценность в ответе. Чтобы это могло помочь другим. Спасибо
Я не удаляю поля display_detail. вместо этого удалите поля «подробности», если «display_detail» имеет значение false.