我正在构建一个可以从ElasticSearch中获益的应用程序。在我目前的版本中,我使用的是单个索引:“消息”只有一种类型:“message”。
消息由以下格式组成(平均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个文档,几乎不需要删除文档。旧数据在这里可以像新插入的文档一样有价值。
答案 0 :(得分:1)
我会坚持使用单一索引和单一类型。
ES“索引”类似于SQL“数据库”。 ES“类型”类似于SQL“表”。您会为不同的公司创建单独的数据库或单独的表吗?可能不是。
ES可以很好地扩展,并且可以很容易地搜索你想要的任何类型的东西。只要给ES提供必要的硬件,50M文档应该没问题。
另外一个注意事项:如果有任何诱惑让ES成为您唯一的数据存储,我会抵制它。我认为它还不存在。将您的MySQL数据库保留为“权威”存储引擎,并使用ES进行搜索。