Хранение пользовательских событий вasticsearch - PullRequest
0 голосов
/ 21 марта 2019

Мы строим хранилище данных о событиях на вершине эластичного поиска. Наша цель - предоставить аналитику в реальном времени с расширенной сегментацией поверх пользователей и событий. Наши организации

пользователей или посетителей События (которые выполняются пользователями, которые будут выше 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". С вложенными документами это работает хорошо. Но родитель-ребенок, я не смог выполнить поиск по родителю и ребенку одновременно.

1 Ответ

1 голос
/ 22 марта 2019

Не уверен, каково ваше отображение и как вы создаете эти документы, но это будет выглядеть примерно так:

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"
              }
            }
          }
        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...