ElasticSearch を使用したオークション システムを構築しました。ユーザー、オークション、入札の 3 つのモデルがあります。ユーザーはオークションを投稿したり、他のオークションに入札したりできます。
検索の最初の使用例の 1 つは、入札単価の検索です。ID、user_id、価格などで検索する以外に、興味深いユースケースに遭遇しました。ユーザーの名前を検索できるようにしたいのですが、そのユーザーが投稿したすべてのオークションからすべての入札を返す必要があります。
たとえば、"John" を検索すると、ユーザー "John" によって投稿されたすべてのオークションに対して送信したすべての入札が取得されます。
インデックスは次のようになります。
Bids
- id (not analyzed)
- user_id (not analyzed)
- price (not analyzed)
- auction_user_name (uses ngrams)
このインデックスにはいくつかの問題があります。
入札には多くの行 (10M 以上) があり、n-gram をオン
auction_user_name
にすると多くのスペースが必要になります。このデータを単一の型を持つ単一のインデックスで本当に非正規化する必要があるかどうか、またはより適切な代替手段 (親子型) があるかどうかを考えています。一部のユーザーは非常にアクティブで、何千もの入札を行うことができます。そのうちの 1 人が名前を変更すると、入札インデックスが何千回も更新されます。これは理想的ではなく、重複が原因で、サービス拒否に対して脆弱な書き込み負荷の高いインデックスになる可能性があります。
これら 2 つの問題に対する既知の解決策はありますか? これを解決するためにできるトレードオフがあると確信しています。
私はいくつかの提案を見てきました: https://www.elastic.co/guide/en/elasticsearch/guide/current/relations.html
メソッドは私が想像していたほどエレガントではないので、問題に取り組む方法がもっとあることに興味があります。