弹性搜索相同数据的一个索引或多个索引

时间:2014-11-05 19:13:34

标签: search elasticsearch full-text-search bigdata

我正在构建一个可以从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个文档,几乎不需要删除文档。旧数据在这里可以像新插入的文档一样有价值。

1 个答案:

答案 0 :(得分:1)

我会坚持使用单一索引和单一类型。

ES“索引”类似于SQL“数据库”。 ES“类型”类似于SQL“表”。您会为不同的公司创建单独的数据库或单独的表吗?可能不是。

ES可以很好地扩展,并且可以很容易地搜索你想要的任何类型的东西。只要给ES提供必要的硬件,50M文档应该没问题。

另外一个注意事项:如果有任何诱惑让ES成为您唯一的数据存储,我会抵制它。我认为它还不存在。将您的MySQL数据库保留为“权威”存储引擎,并使用ES进行搜索。