Исключить поле из результатов поиска по другому полю в elasticsearch?

Мне нужно удалить поле из результатов поиска в 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)

это хороший способ справиться с этим? или есть ли шанс, что я смогу получить более быстрый/чистый способ с помощью эластичного запроса?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
35
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если у вас есть список диктов, вы можете удалить элементы из диктовок с помощью 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}]

Я не удаляю поля display_detail. вместо этого удалите поля «подробности», если «display_detail» имеет значение false.

wenz 23.03.2022 04:19

хорошо, это было так же легко сделать с одним дополнительным оператором if внутри цикла. Я изменил ответ соответственно, поэтому удовлетворите вопрос.

D.L 23.03.2022 09:59
Ответ принят как подходящий

Невозможно выбрать/скрыть поля на основе условия.

Однако вы можете выбрать/скрыть поля, используя параметры полей или параметры источника из всех документов.

Всегда рекомендуется обрабатывать такие микрооперации на стороне клиента так же, как и вы.

хорошо, спасибо, чтобы прояснить эту проблему.

wenz 23.03.2022 04:13

Отметьте это решенным, если вы найдете ценность в ответе. Чтобы это могло помочь другим. Спасибо

Ashish Tiwari 23.03.2022 05:36

Другие вопросы по теме