0

我构建了一个使用 ElasticSearch 的拍卖系统。它有 3 个模型,用户、拍卖和出价。用户可以发布拍卖,也可以在其他拍卖中出价。

我的第一个搜索用例是搜索出价。除了通过 id、user_id、price 等进行搜索之外,我还遇到了一个有趣的用例。我希望能够搜索用户的姓名,它应该从该用户发布的所有拍卖中返回我的所有出价。

例如,当我搜索“John”时,它会得到我为用户“John”发布的所有拍卖发送的所有出价。

这是索引的样子:

Bids
- id (not analyzed)
- user_id (not analyzed)
- price (not analyzed)
- auction_user_name (uses ngrams)

我对这个索引有几个问题:

  1. Bids 有很多行(10M+),并且有 n-gramsauction_user_name占用了大量空间。我在想是否真的应该在具有单一类型的单一索引中对这些数据进行非规范化,或者是否有任何更合适的替代方案(父子类型)?

  2. 一些用户非常活跃,可以有数千个出价。如果其中一个人更改了名字,则会导致对投标索引的数千次更新。这并不理想,并且由于重复,它可能导致写入繁重的索引,这可能容易受到拒绝服务的影响。

这两个问题是否有已知的解决方案?我确信我可以做一些权衡来解决这个问题。

我在以下方面看到了一些建议:https ://www.elastic.co/guide/en/elasticsearch/guide/current/relations.html

这些方法并不像我想象的那么优雅,所以如果有更多的方法来解决这个问题,我很感兴趣。

4

0 回答 0