ElasticSearch字词查询与多值字段中的所有值匹配

时间:2018-06-27 22:12:21

标签: elasticsearch

在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 ---没有电子邮件与白名单匹配的文档。

是否有一种有效的方法来实现这一目标?不幸的是,有太多数据无法使用脚本查询。

0 个答案:

没有答案