我必须以以下格式将数据上传到麋鹿:
{
"location":{
"timestamp":1522751098000,
"resources":[
{
"resource":{
"name":"Node1"
},
"probability":0.1
},
{
"resource":{
"name":"Node2"
},
"probability":0.01
}]
}
}
我正在尝试定义一种此类数据的映射,并根据以下映射生成了他:
{
"mappings": {
"doc": {
"properties": {
"location": {
"properties" : {
"timestamp": {"type": "date"},
"resources": []
}
}
}
}
}
我有2个问题:
[{type:resource}]
)?答案 0 :(得分:1)
关于Elasticsearch映射有很多事情要知道。我强烈建议您通读至少their documentation的部分内容。
如果您不在乎,请先简短回答:
好答案和一些想法
看看下面的映射:
"mappings": {
"doc": {
"properties": {
"location": {
"properties": {
"timestamp": {
"type": "date"
},
"resources": { [1]
"type": "nested", [2]
"properties": {
"resource": {
"properties": {
"name": { [3]
"type": "text"
}
}
},
"probability": {
"type": "float"
}
}
}
}
}
}
}
}
这就是您的映射的外观。可以做不同的事情,但是我认为这样是可行的-也许除了标记3。我现在就来谈谈这些:
标记1:。如果定义字段,通常会为其指定一种类型。我将resources
定义为nested
类型,但是您的timestamp
是date
类型。 Elasticsearch自动允许存储这些对象的一个或多个值。 timestamp
实际上还可以包含dates
的数组,有no need to specify an array。
标记2:我将resources
定义为nested
类型,但是它也可能是一个像resource
这样的对象,位于下面(没有类型是给定)。了解嵌套对象here。最后,我不知道您的查询是什么样子,所以不确定您是否真的需要嵌套类型。
标记3:我想在这里解决两点。首先,我想再次提到resource
被定义为具有属性name
的普通object。您也可以为resources
做到这一点。
第二件事更多是发人深省的冲动:如果某些事情绝对不适合您的情况,请不要太当真。只是把它当作一种意见。
此映射结构看起来很受关系数据库方法的启发。我认为您通常希望为弹性搜索定义更多的文档结构,以进行预期的搜索。冗余不是问题,但是嵌套对象会使查询变得复杂。我想我会省略整个资源部分,并做这样的事情:
"mappings": {
"doc": {
"properties": {
"location": {
"properties": {
"timestamp": {
"type": "date"
},
"resource": {
"properties": {
"resourceName": {
"type": "text"
}
"resourceProbability": {
"type": "float"
}
}
}
}
}
}
}
}
因为正如我所说,在这种情况下,resource
可以包含一个对象数组,每个对象都有一个resourceName
和一个resourceProbability
。