elasticsearch 什么是;“类型”;在弹性搜索中是什么意思?
我完全被Elasticsearch的文档搞糊涂了 在中,“类型”与MongoDB中的集合有些相似: 在此索引中,您可以为用户数据定义一种类型,为博客数据定义另一种类型,为评论数据定义另一种类型 但实际上,它说: 类型不太适合于完全不同的数据类型。如果您的两种类型都有互斥的字段集,这意味着索引的一半将包含“空”值(字段将稀疏),这将最终导致性能问题 上面提到的“用户”和“博客”不是有相互排斥的字段集吗? 例如:“用户”有“姓名”、“年龄”字段,“博客”有“创建日期”、“内容”字段 我习惯于相信Elasticsearch和MongoDB之间的映射关系是: 索引数据库 类型集合 对不对?elasticsearch 什么是;“类型”;在弹性搜索中是什么意思?,elasticsearch,types,elasticsearch,Types,我完全被Elasticsearch的文档搞糊涂了 在中,“类型”与MongoDB中的集合有些相似: 在此索引中,您可以为用户数据定义一种类型,为博客数据定义另一种类型,为评论数据定义另一种类型 但实际上,它说: 类型不太适合于完全不同的数据类型。如果您的两种类型都有互斥的字段集,这意味着索引的一半将包含“空”值(字段将稀疏),这将最终导致性能问题 上面提到的“用户”和“博客”不是有相互排斥的字段集吗? 例如:“用户”有“姓名”、“年龄”字段,“博客”有“创建日期”、“内容”字段 我习惯于相信El
如果不是,建议它们之间的映射样式是什么?没错,索引==数据库,类型==用于elasticsearch的集合。在RDBMS术语中,
索引
是一个数据库,类型
可以是一个包含许多行的表(elasticsearch中的文档
)
您可以有一个不同的索引来维护用户信息,其中“姓名”、“年龄”和其他此类字段通常归属于一个人,而对于带有“createdAt”、“content”等的博客,您可以有一个不同的索引。然而,您可能希望在每个博客文档中都有一个“user”字段,以便能够识别发布它的人。以后,如果需要,你可以申请
类型不太适合于完全不同的数据类型。如果您的两种类型都有互斥的字段集,这意味着索引的一半将包含“空”值(字段将稀疏),这将最终导致性能问题
类型
只是Elasticsearch中的另一个字段,处于非常基本的级别。当您执行GET/my\u index/my\u type/\u search
ES将对my\u type
字段\u type
的值运行预筛选-这就像一个自动筛选一样
不要将索引和类型视为SQL世界中的数据库和表,因为它们并非如此
如果索引中的type1
带有f1
和f2
字段,以及type2
带有f1
和f3
字段,则会有带有f1
、f2
、f3
字段的文档。为什么这很重要-当使用搜索字段f1
中的值的查询来计算文档的分数时,字段f1
中的术语频率将是全局(type1
和type2
)因此,如果从type1
中搜索f1
中的某个值,则返回的分数也会受到type2
中f1
值的轻微影响
另外,请不要简单地按照主键/外键方法在ES中定义父/子关系,将一组SQL表转换为ES。所以“用户”和“博客”应该放在不同的索引中,或者放在一个索引中的不同类型中?这取决于数据:您在查询中需要它们之间的关系吗?是否会有更多属于某个用户的博客?有多少用户有多复杂?它非常简单,您可以将它放在相同的索引和类型中,这样您就可以简单地复制数据了?顺便说一句,在ES世界中,很多时候使用非规范化数据要好得多(比如在用户拥有的每个博客中放置相同的用户数据)。