我正在构建一个可以从ElasticSearch中获益的应用程序 . 在我目前的版本中,我使用的是单个索引:只有一种类型的“消息”:“消息” .
消息由以下格式组成(平均10kb):
messages
- id
- subject (string)
- date (date) (format: dateOptionalTime)
- account_id (integer)
- body (string)
- receivers (nested)
properties:
name (string)
email (string)
- files (nested)
properties:
content_type (string)
filename (string)
size (long)
搜索当前基于account_id(为每个查询添加过滤器) . 在我的mySQL数据库中,每个帐户都有一个company_id(一个公司可以拥有多个帐户) . 将来我可能愿意允许用户在公司范围内搜索,而不是在单个帐户中搜索 . 我的数据集有点大(> 50米文档) .
我的问题是什么是最好的,只使用单一类型(消息)的单个索引(消息),或者在公司范围的索引上执行类似的操作,其中每个我将为每个公司创建新索引(如messages_%company_id %) .
我的数据集每月会增加1到5M个文档,几乎不需要删除文档 . 旧数据在这里可以像新插入的文档一样有 Value .
1 回答
我会坚持使用单一索引和单一类型 .
ES“索引”类似于SQL“数据库” . ES“类型”类似于SQL“表” . 您会为不同的公司创建单独的数据库或单独的表吗?可能不是 .
ES可以很好地扩展,并且可以很容易地搜索到你想要的任何类型的东西 . 只要给ES提供必要的硬件,50M文档应该没问题 .
另外一个注意事项:如果有任何让ES成为您唯一数据存储的诱惑,我会反对它 . 我认为它还不存在 . 将MySQL数据库保留为“权威”存储引擎,并使用ES进行搜索 .