Запрос условий ElasticSearch сопоставляется со всеми значениями в многозначном поле - PullRequest
0 голосов
/ 28 июня 2018

В ElasticSearch (5.4) у меня есть документы следующей структуры:

{
    "email": {
        type: "text",
        "fields": {
           "keyword": {
               "type": "keyword",
               "ignore_above": 256
           }
        }
    }
}

, где email - многозначное поле (с любым документом может быть связано несколько электронных писем), представляющее адрес электронной почты. У меня также есть список «разрешенных адресов электронной почты».

Я хотел бы написать запрос, чтобы найти документы, содержащие любые адреса электронной почты вне белого списка.

Например, если бы у нас было:

whitelist = ['email1@test.com', 'email2@test.com']

document1: {email: ['email1@test.com', 'email4@test.com']}
document2: {email: ['email1@test.com']}
document3: {email: ['email5@test.com', 'email6@test.com']}

Мы бы хотели, чтобы запрос нашел документы 1 и 3.

Моим первым инстинктом было использование запроса вида:

{
    bool: {
        must_not: {terms: {email.keyword: [whitelist]}}}
    }
}

Однако это возвращает только document3 --- документ, в котором ни один из электронных писем не соответствует белому списку.

Есть ли эффективный способ добиться этого? К сожалению, слишком много данных, чтобы использовать запрос сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...