假设我定义了两个ElasticSearch映射,例如:
"firstMapping" : {
"properties" : {
"name" : {
"type" : "string"
},
"someProperty" : {
"type" : "string"
}
}
}
和
"secondMapping" : {
"properties" : {
"name" : {
"type" : "string"
},
"someOtherProperty" : {
"type" : "string"
}
}
}
我有两个问题:
目前,这些映射是在两个不同的索引中创建的,没有明显的原因(除了通过计算索引中元素的数量来快速计算一个映射中的文档数量,这似乎是一个非常虚假的原因。)
我认为这样做的优先方法是创建一个包含这两个相关映射的索引,因为关系数据库会包含许多不同的表。
对于每个映射,一个文档都有一个" origin"," realtime"或者"批次"。正如您可能已经猜到的那样,对于每个"批次"文件应该只有一个相应的"实时"文件,每个基本上持有相同的值。
换句话说,在该系统中,"记录"应该由两个文件组成:a" batch"文件和"实时"文件,否则相同。
因此,有一个"批次"或"实时"文件应视为异常;因此需要有一种简单的方法来比较"批次"和"实时"数据相互对立。
目前,每个映射实际上都是在两个索引中创建的,例如
batchFirstMappingIndex
包含"批次"的firstMapping
个文档原点realtimeFirstMappingIndex
包含"实时"的firstMapping
个文档原点(resp.secondMapping)
由于映射本质上是类型,我想知道对两个源都有一个映射是否更合适,例如:
"firstMappingWithOrigin" : {
"properties" : {
"origin" : {
"type" : "boolean"
},
"name" : {
"type" : "string"
},
"someProperty" : {
"type" : "string"
}
}
}
(resp.secondMapping)
&{34;批次"的false
值&{34}实时"
true
值
醇>
总而言之,我目前在4个独立的指数中有4个资源:
我认为我们只能在一个索引中轻松拥有2个资源:
这两种解决方案的优点和缺点是什么?第二种方法的最佳理由是什么?
对于这两个问题,我特别关注:
答案 0 :(得分:1)
ES人员的以下文章应该对此有所了解:http://elastic.co/blog/index-vs-type
另请注意"删除属性" ES中不可能,"modifying properties"仅限于兼容的更改。