需要在Elasticearch中存储数组数据。数组可以包含字符串或对象,因此我可以同时接受这两种数组类型。我可以通过定义单独的数组类型来做到这一点。但我需要一个可以接受数组中的字符串或对象的通用解决方案。
要存储在Elasticearch中的对象:
{
"anotherData": [
{
"someData": {
"testingName": [
{
"alternateName": "Another data",
"areaCategory": "some data"
}
]
}
}
]
}
用于存储上述数据的ElasticSearch架构:
{
....
"mappings": {
"properties": {
"testingName": {
"properties": {
"alternateName": {
"type": "keyword"
},
"areaCategory": {
"type": "keyword"
}
}
},
....
}
}
}
另一个要存储的对象的示例:
{
"anotherData": [
{
"someData": {
"testingName": [
"this is only a array string"
]
}
}
]
}
对于上面的对象,Elasticearch模式将是:
{
....
"mappings": {
"properties": {
"testingName": {
"type": "keyword"
},
....
}
}
}
我需要在模式中将两者组合为“Any of One”条件。我可以存储上面两个对象中的任何一个,它们可以是字符串数组或对象数组。请共享可同时适用于这两种类型的Elasticearch架构。
1条答案
按热度按时间pgx2nnw81#
在相同字段中存储对象或字符串的唯一方法是使用以下Map,即disabled object
这意味着您的源文档将被允许具有包含字符串或对象的
testingName
字段,但最大的缺点是您将无法在该字段上查询。在数据设计方面,有这样的“两头”字段是没有意义的,至少ES不支持这一点。最好有两个不同的字段,一个用于字符串,另一个用于对象。
更新:
以下是该解决方案的完整再现:
退货