我们有一个将使用ElasticSearch的程序。我们需要使用连接进行查询,而弹性搜索不支持连接,因此我们留下了嵌套或父子关系。我已经读过使用父子可以导致significant performance issues,所以我们考虑使用嵌套文档。
我们对产品进行索引/查询,但我们也有客户和供应商。所以,这是我对产品映射的思考:
{
"mappings" : {
"products" : {
"dynamic": false,
"properties" : {
"availability" : {
"type" : "text"
},
"customer": {
"type": "nested"
},
"vendor": {
"type": "nested"
},
"color" : {
"type" : "text"
}
},
"created_date" : {
"type" : "text"
}
}
}
}
}
客户和供应商是我的映射字段。
这种映射看起来是否正确?由于我将动态设置为false,是否需要指定客户和供应商子文档的内容?如果是这样,我该怎么做?
我的团队发现父/子关系对我们的表现非常不利,所以我认为您可能正在做出使用嵌套字段的好决定。
如果使用dynamic:false,则不会将未定义的字段添加到映射中。您可以将其设置为true,并在索引时添加这些字段,也可以自己在嵌套文档上定义属性:
{
"mappings" : {
"products" : {
"dynamic": false,
"properties" : {
...
"customer": {
"type": "nested",
"properties": {
"prop a": {...},
"prop b": {...}
}
},
"vendor": {
"type": "nested",
"properties": {
"prop a": {...},
"prop b": {...}
}
},
...
}
}
}
}