将基于用户的事件存储在Elasticsearch中



我们正在Elasticsearch之上构建事件数据存储。我们的目标是在用户& amp; amp; amp; amp; amp; amp上提供实时分析。事件。我们的实体是

用户或访客事件(由用户执行,将高于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次。

父母关系,不满意分段

可能的查询:

给我在美国的用户IDS,并执行了"添加到购物车"&产品名称是" iPhone X"有了嵌套的文档,它运行良好。但是父母,我无法对父母进行搜索。同时的孩子。

不确定您的映射如何以及如何创建这些文档,但看起来像这样:

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"
              }
            }
          }
        }
      ]
    }
  }
}

最新更新