【问题标题】:Storing user based events in elasticsearch在弹性搜索中存储基于用户的事件
【发布时间】:2019-03-22 06:23:12
【问题描述】:

我们正在 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 次。

亲子关系,不满足细分

可能的查询:

给我用户 ID,他在美国并执行了“添加到购物车”和产品名称是“iPhone X” 使用嵌套文档,它运行良好。但是父子,我不能同时对父子进行搜索。

【问题讨论】:

    标签: elasticsearch


    【解决方案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"
                  }
                }
              }
            }
          ]
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 2017-09-07
      • 2016-02-02
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      • 2018-11-25
      • 2021-08-27
      相关资源
      最近更新 更多