在elasticsearch中,我们有一个带有对象数组的类型。尝试从Kibana访问时,访问时出现一些不一致之处
这是我的 map 摘录,
{
"myIndex-2017.08.22": {
"mappings": {
"typeA": {
"properties": {
.
.
.
"Collection": {
"properties": {
.
.
.
"FileType": {
"type": "text"
}
}
}
}
}
}
}
}
在这里我可以在集合中有多个对象,即将其索引为数组。当我也尝试使用一种FileType(例如FileType:DOCX)进行查询时,我也会得到一些FileType也为HTML的记录。
当深入研究时,我发现这是因为某些记录具有两个集合元素,一个为FileType:DOCX,另一个为FileType:HTML。
为什么过滤如此工作?还有其他方法可以过滤和仅获取FileType:DOCX而不显示FileType:HTML。
正在运行ES 5.3。
最佳答案
Elasticsearch开箱即用地将数组字段展平,因此
{
"files" : [
{
"name" : "name1",
"fileType" : "doc"
},
{
"name" : "name2",
"fileType" : "html"
}
]}
变成:
{
"files.name" : [ "name1", "name2" ],
"files.fileType" : [ "doc", "html" ]
}
如果要在此数组中搜索对象本身,则必须在集合的映射中使用nested datatype:
{
"myIndex-2017.08.22": {
"mappings": {
"typeA": {
"properties": {
.
.
.
"Collection": {
"type": "nested",
"properties": {
.
.
.
"FileType": {
"type": "text"
}
}
}
}
}
}
}
}