Мне нужно исключить из моего поиска ассоциацию разных терминов. Есть ли какой-нибудь умный способ сделать такое многослойное исключение?
Пример: скажем, я хочу получить всех пользователей, кроме тех, чьи (фамилия Доу ) и (имя Джон или Ann ie или без любого значения имени).
Пример ожидаемых результатов:
first_name | last_name | Search result
--------------------------------------
Bob | Doe | appears
--------------------------------------
Annie | Doe | excluded
--------------------------------------
(null) | Doe | excluded
--------------------------------------
John | Foo | appears
--------------------------------------
(null) | Foo | appears
Пока что лучшим, что я сделал, был следующий запрос, но он не работает: в нашем примере этот запрос исключит всех, чья фамилия Doe, Какое бы ни было имя ... и я не могу понять, почему?
GET user/_search
{
"query": {
"bool": {
"must_not": [
{
"bool": {
"must": [
{
"term": {
"last_name": "Doe"
}
}
]
}
},
{
"bool": {
"should": [
{
"bool": {
"must": [
{
"terms": {
"first_name": [
"John",
"Annie"
]
}
}
]
}
},
{
"bool": {
"must_not": {
"exists": {
"field": "first_name"
}
}
}
}
]
}
}
]
}
}
}
Любая помощь Elasti c -резкого глаза на это будет очень цениться!