Для одного из моих проектов мне нужно определить все записи из моего индекса ES, где поле отсутствует. Ниже приведен пример моих данных, хранящихся в моем индексе ES:
{
"schema": "https://sample.org/schemas/user_v0.0.1.json",
"barcode": "210000001",
"birth_date": "1961-11-24",
"first_name": "John",
"last_name": "Doe",
"subscriptions": [
{
"end_date": "2021-03-30",
"start_date": "2020-03-30"
}
]
}, {
"schema": "https://sample.org/schemas/user_v0.0.1.json",
"barcode": "210000002",
"birth_date": "1980-03-17",
"first_name": "Bob",
"last_name": "Smith",
"subscriptions": []
}, {
"schema": "https://sample.org/schemas/user_v0.0.1.json",
"barcode": "210000003",
"birth_date": "1980-03-17",
"first_name": "Patty",
"last_name": "Smith"
}
Я хотел бы определить, у кого из моих пользователей нет подписок. В моем примере «Боб Смит» и «Пэтти Смит» должны быть возвращены. Мне нужно сделать это с помощью Python ElasticSearch DSL-запроса.
В настоящее время я могу отфильтровать результаты поиска, чтобы получать только пользователей, но, несмотря на многие попытки, я не нашел способа получить только пользователей "must_not "+" существует "подписка.
results = Search()\
.filter('term', schema='https://sample.org/schemas/user_v0.0.1.json')
# complete filter with : "Must not exists subscription"
.source('barcode')
.scan()
Спасибо за помощь