Elasticsearch按属性查询唯一项

时间:2017-04-24 10:49:56

标签: elasticsearch

我有以下文档结构:

[
    {
        "email": "a@a.com",
        "event": "delivered",
    },
    {
        "email": "a@a.com",
        "event": "opened",
    },
    {
        "email": "a@a.com",
        "event": "clicked",
    },
    {
        "email": "b@b.com",
        "event": "delivered",
    },
    {
        "email": "c@c.com",
        "event": "delivered",
    },
    {
        "email": "c@c.com",
        "event": "opened",
    }
]

我想查询已发送但未打开但未点击的电子邮件地址。

是否有一个查询解决方案,或者我可以执行此应用程序端逻辑?

1 个答案:

答案 0 :(得分:0)

使用以下查询将列表映射到nested

{
    "mappings": {
        "documet_type": {
            "properties": {
                "list": {
                    "type": "nested",
                    "properties": {
                        "email": {
                            "type": "text"
                        },
                        "event": {
                            "type": "text"
                        }
                    }
                }
            }
        }
    }
}

查询

{
    "query": {
        "nested": {
            "path": "list",
            "query": {
                "term": {
                    "list.event": {
                        "value": "delivered"
                    }
                }
            },
            "inner_hits": {}
        }
    }
}

Innerhits会返回包含已发送事件的所有事件的列表。