在 ElasticSearch 中,我必须创建单个索引和多个类型还是创建具有单个类型的多个索引?



我是弹性搜索的新手。我正在使用弹性搜索大数据。

我的应用程序中没有联接查询,那么哪种结构最适合我的应用程序?

我正在研究过去几天的松紧带。我想分享我的经验/学习。

1)如果我们从MYSQL、SQL这样的关系数据库转移到ES,我们需要维护所有数据之间的所有关系。在不同类型或索引中声明主键,在此基础上可以执行查询DSL。

2)如果您每天处理数百万数据,则需要进行相应的设计。有些人更喜欢基于持续时间的结构,例如Day, Week, Month明智的。这完全取决于您的用例。对于大型数据集(~1TB),您需要将数据分布在各种indexesshards中。

3)如果您有小数据集,它也将在默认设置下工作(5 shrads 1 replica)。如果您的数据集在您的shards中很小,它会给你更好的。

4)JOIN查询在弹性搜索中可能很昂贵。如果您经常执行它可能会影响您的HEAP。因此,我建议使用pre-cooked数据(在关系数据库中执行连接查询时获得的结果数据)和具有唯一ID的文档来准备数据集。你可以参考这个。查看此处,我们如何执行JOIN

5)在设计索引时,可能需要注意以下几点:

  1. 不要把 Elasticsearch 当成一个数据库
  2. 在加入之前了解您的用例
  3. 明智地组织数据
  4. 巧妙地利用副本
  5. 根据实验制定容量计划

6)错误的架构可能会导致reindex这将造成停机的沉重成本。查看本文以了解index designing和最佳实践。

最新更新