我必须以以下格式将数据上传到麋鹿:
{
"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": []
}
}
}
}
}
我有两个问题:
[{type:resource}]
)? 最佳答案
关于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
执行此操作。第二件事更多是发人深省的冲动:如果某些事情绝对不适合您的情况,请不要太当真。只是把它当作一种意见。
这种映射结构看起来很受关系数据库方法的启发。我认为您通常希望为 flex 搜索定义更多的文档结构,以进行预期的搜索。冗余不是问题,但是嵌套对象会使查询变得复杂。我想我会省略整个资源部分,并做这样的事情:
"mappings": {
"doc": {
"properties": {
"location": {
"properties": {
"timestamp": {
"type": "date"
},
"resource": {
"properties": {
"resourceName": {
"type": "text"
}
"resourceProbability": {
"type": "float"
}
}
}
}
}
}
}
}
因为正如我说的,在这种情况下
resource
可以包含一个对象数组,每个对象都有一个resourceName
和resourceProbability
。
关于elasticsearch - Elasticsearch自定义映射定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52744039/