ElasticSearch - устранение проблем с ненормализованными данными
Я построил систему аукционов, которая использует ElasticSearch. Имеет 3 модели, пользователей, аукционы и ставки. Пользователь может опубликовать аукцион, а также делать ставки на других аукционах.
Один из моих первых вариантов использования - поиск ставок. Помимо поиска по id, user_id, цене и т. Д., Я столкнулся с интересным вариантом использования. Я хочу иметь возможность искать имя пользователя, и он должен возвращать все мои ставки со всех аукционов, размещенных этим пользователем.
Например, когда я ищу "Джон", он получает все отправленные мной заявки на все аукционы, размещенные пользователем "Джон".
Вот как выглядит индекс:
Bids
- id (not analyzed)
- user_id (not analyzed)
- price (not analyzed)
- auction_user_name (uses ngrams)
У меня есть пара проблем с этим индексом:
Bids имеет много строк (10M+) и имеет n-грамм
auction_user_name
занимает много места. Я думаю, если эти данные действительно должны быть нормализованы в одном индексе с одним типом, или есть какие-либо альтернативы, которые являются более подходящими (типы родитель-потомок)?Некоторые пользователи очень активны и могут иметь тысячи ставок. Если один из них изменит свое имя, это приведет к тысячам обновлений индекса ставок. Это не идеально, и из-за дубликатов это может привести к увеличению индекса записи, что может привести к отказу в обслуживании.
Есть ли известные решения для этих двух проблем? Я уверен, что есть какой-то компромисс, который я могу сделать, чтобы решить это.
Я видел несколько предложений по адресу: https://www.elastic.co/guide/en/elasticsearch/guide/current/relations.html
Методы не так элегантны, как я себе представлял, поэтому мне интересно, есть ли еще способы решения этой проблемы.