我有如下索引映射:
{
"mapping": {
"properties": {
"MyMapProperty": {
"type": "nested",
"properties": {
"first": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"second": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
}
},
"SecondProperty": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"ThirdProperty": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"Timestamp": {
"type": "date"
}
}
}
}
添加新文档后,其源如下所示:
{
"_index": "indexName",
"_type": "_doc",
"_id": "idlklkm43rgre",
"_version": 1,
"_score": 0,
"_source": {
"MyMapProperty": {
"first": "value1",
"second": "value2",
},
"SecondProperty": "value3",
"ThirdProperty": "value4",
},
"fields": {
"Timestamp": [
"2020-05-11T12:54:49.049Z"
]
}
}
因此,我在 Kibana 中看到可用的字段:我的地图属性.拳头 |MyMapProperty.second |第二物业 |第三属性
问题是,当我尝试搜索MyMapProperty.fist:值时 - 它什么也找不到...但是,如果我搜索第二属性:值3 - 它会返回结果。
我试图了解我做错了什么,是 kibana 问题还是弹性搜索,或者我正在执行一些奇怪的操作。你能指教一下吗?
在 ES 7.6 之前,无法在 Kibana 内部搜索嵌套字段。从 ES 7.6 开始,现在可以使用特定的搜索语法来执行此操作,如下所示:
MyMapProperty:{ first:value }
你可以试试。
注意:这仅适用于 KQL,而不适用于 Lucene,因为 Lucene 表达式语言不支持嵌套字段
解决方案是从"MyMapProperty"的索引定义中删除类型。
"type": "nested"
之后嵌套属性变得可搜索...