#elasticsearch
#elasticsearch
Вопрос:
Мы создаем хранилище данных о событиях поверх 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» с вложенными документами, все работает хорошо. Но родитель-потомок, я не смог выполнить поиск в parent amp; child одновременно.
Ответ №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"
}
}
}
}
]
}
}
}