我们正在Elasticsearch之上构建事件数据存储。我们的目标是在用户和事件之上提供具有高级细分的实时分析。我们的实体是
用户或访客 事件(由用户执行,将在100-1000以上)
示例:
{
"first_name": "John",
"email": "john@es.com",
"country": "US",
"user_id": 100
}
{
"event_name": "Add To Cart",
"user_id": 100,
"product_name": "IPhone X"
}
我尝试了2种选择
嵌套文档,一个问题是用户属性不会被频繁修改。但是,事件将非常频繁地执行。假设一个用户将执行1000多个事件,因此同一文档将被更新1000次以上。
亲子关系,不满足细分条件
可能的查询:
请给我在美国执行了“添加到购物车”和产品名为“ iPhone X”的用户ID。 使用嵌套文档,效果很好。但是亲子,我无法同时对亲子进行搜索。
答案 0 :(得分:1)
不确定如何映射以及如何创建这些文档,但是看起来像这样:
PUT events
PUT events/_doc/_mapping
{
"properties": {
"relation": {
"type": "join",
"relations": {
"owner": "related_event"
}
}
}
}
PUT events/_doc/100
{
"first_name": "John",
"email": "john@es.com",
"country": "US",
"user_id": 100,
"relation": {
"name": "owner"
}
}
PUT events/_doc/2034?routing=100
{
"event_name": "Add To Cart",
"user_id": 100,
"product_name": "IPhone X",
"relation": {
"name": "related_event",
"parent": 100
}
}
这是您的查询:
GET events/_search
{
"_source": "id",
"query": {
"bool": {
"must": [
{
"match": {
"country": "US"
}
},
{
"has_child": {
"type": "related_event",
"query": {
"match": {
"product_name": "IPhone X"
}
}
}
}
]
}
}
}