我必須從 Elasticsearch 的搜索結果中洗掉一個欄位。如果為 False ,我想洗掉該detail屬性。display_detail
檔案示例:
{
"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)
這是處理它的好方法嗎?或者有沒有機會通過使用彈性查詢獲得更快/最干凈的方式?
uj5u.com熱心網友回復:
無法根據條件選擇/隱藏欄位。
但是,您可以使用所有檔案中的欄位選項或源選項來選擇/隱藏欄位
始終建議以與您處理相同的方式在客戶端處理此類微操作。
uj5u.com熱心網友回復:
如果你有一個字典串列,那么你可以使用 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}]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/448772.html
