Answers:
两种方法都有不同的含义。
假设您使用的是Elasticsearch的默认设置,则每个模型具有1个索引将大大增加分片的数量,因为1个索引将使用5个分片,而5个数据模型将使用25个分片;在1个索引中有5种对象类型时,仍将使用5个分片。
将每个数据模型作为索引的含义:
将每个数据模型作为索引中的对象类型的含义:
如果您要问什么是太多数据与小数据?通常,它取决于处理器速度和硬件的RAM,用于Elasticsearch的映射中每个变量内存储的数据量以及查询要求;在查询中使用许多方面会大大降低您的响应时间。没有直接的答案,您将必须根据需要进行基准测试。
By default elasticsearch rejects search requests that would query more than 1000 shards. The reason is that such large numbers of shards make the job of the coordinating node very CPU and memory intensive. It is usually a better idea to organize data in such a way that there are fewer larger shards. In case you would like to bypass this limit, which is discouraged, you can update the action.search.shard_count.limit cluster setting to a greater value.
”
尽管乔纳森当时的回答是正确的,但世界已经发展了,现在看来,ElasticSearch背后的人们有长期计划放弃对多种类型的支持:
我们想要去的地方:我们想从Elasticsearch中删除类型的概念,同时仍然支持父/子。
因此,对于新项目,每个索引仅使用一种类型将使最终升级到ElasticSearch 6.x更加容易。
乔纳森的答案很好。我只需要添加其他几点考虑:
以上两个答案都很棒!
我在索引中添加了几种类型的示例。假设您正在开发一个用于在图书馆中搜索书籍的应用程序。向图书馆馆长提出的问题很少,
问题:
您打算存储几本书?
您要在图书馆中存放哪种书?
您打算如何搜寻书籍?
答案:
我计划存储约5万到7万本图书
我将拥有15 k -20 k技术相关的书籍(计算机科学,机械工程,化学工程等),15 k的历史书籍,10 k的医学书籍。10 k与语言相关的书籍(英语,西班牙语等)
按作者名字,作者姓氏,出版年份,出版者名称搜索。(这使您了解应在索引中存储哪些信息)
从上面的答案中,我们可以说索引中的模式应该看起来像这样。
//这不是确切的映射,仅用于示例
"yearOfPublish":{
"type": "integer"
},
"author":{
"type": "object",
"properties": {
"firstName":{
"type": "string"
},
"lastName":{
"type": "string"
}
}
},
"publisherName":{
"type": "string"
}
}
为了实现上述目的,我们可以创建一个称为Books的索引,并且可以具有多种类型。
索引:书
类型:科学,艺术
(或者,如果您有更多书籍,则可以创建许多类型,例如技术,医学,历史,语言)
这里要注意的重要一点是架构是相似的,但是数据并不相同。另一个重要的事情是您要存储的总数据。
希望以上内容对何时在索引中使用不同类型有帮助,如果您具有不同的架构,则应考虑使用不同的索引。索引较小,数据较少。大数据大索引:-)