如何在Elastic Search中通过特定值查找内部对象具有多个字段的对象

时间:2019-04-23 09:54:45

标签: elasticsearch

我有一个索引,其中包含名为“ DynamicFields”的对象,并且每个对象都有一个名为“ Fields”的内部对象,如下所示:

 {
                "DynamicFields": [
                    {
                        "Fields": [
                            {
                                "DFieldVal": "Value1",
                                "Owned": 0,
                                "DFieldRelCode": 181254,
                                "DFieldCode": 1835
                            },
                            {
                                "DFieldVal": "Value2",
                                "Owned": 0,
                                "DFieldRelCode": 181255,
                                "DFieldCode": 1836
                            },
                            {
                                "DFieldVal": "Value3",
                                "Owned": 1,
                                "DFieldRelCode": 181256,
                                "DFieldCode": 1837
                            },
                            {
                                "DFieldVal": "Value4",
                                "Owned": 0,
                                "DFieldRelCode": 181257,
                                "DFieldCode": 1838
                            }
                        ]
                    }
                ]
            }

我需要找到具有内部对象“ Fields”的对象“ DynamicFields”,其确切值如下:

“ DFieldCode”:1837

“拥有”:0

我正在使用此查询,但是它给我错误的结果,它应该返回空结果,因为没有任何内部对象“ Fields”同时具有两个值:

{
  "from":0,
  "size":10,
  "query": {
    "bool":{
        "must":[
            { "terms": { "DynamicFields.Fields.Owned" : [0] } },
            { "terms": { "DynamicFields.Fields.DFieldCode" : [1837] } }
        ]
    }
  }
}

我认为问题在于,弹性搜索将内部对象属性视为根对象的常规属性,因此,无论同一个内部对象,它都会返回所有内部对象中具有提及字段的对象。

编辑: 我已经汇总了数据以使其更简单 映射是数据的完整映射:

{
"marketplace": {
    "mappings": {
        "object": {
            "properties": {
                "Addresses": {
                    "properties": {
                        "AddrID": {
                            "type": "long"
                        },
                        "AddressText": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        },
                        "AddressTree": {
                            "properties": {
                                "AddrFieldRelID": {
                                    "type": "long"
                                },
                                "AddrTitleName": {
                                    "type": "text",
                                    "fields": {
                                        "keyword": {
                                            "type": "keyword",
                                            "ignore_above": 256
                                        }
                                    }
                                },
                                "AddrTitlePersianName": {
                                    "type": "text",
                                    "fields": {
                                        "keyword": {
                                            "type": "keyword",
                                            "ignore_above": 256
                                        }
                                    }
                                },
                                "AddrValName": {
                                    "type": "text",
                                    "fields": {
                                        "keyword": {
                                            "type": "keyword",
                                            "ignore_above": 256
                                        }
                                    }
                                },
                                "Latitude": {
                                    "type": "float"
                                },
                                "Longitude": {
                                    "type": "float"
                                }
                            }
                        },
                        "Latitude": {
                            "type": "float"
                        },
                        "Longitude": {
                            "type": "float"
                        },
                        "Tel": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        }
                    }
                },
                "DelFlag": {
                    "type": "long"
                },
                "DynamicFields": {
                    "properties": {
                        "DynamicDefCode": {
                            "type": "long"
                        },
                        "DynamicDefDataTypeName": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        },
                        "DynamicDefName": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        },
                        "DynamicValKind": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        },
                        "Fields": {
                            "properties": {
                                "DFieldCode": {
                                    "type": "long"
                                },
                                "DFieldRelCode": {
                                    "type": "long"
                                },
                                "DFieldVal": {
                                    "type": "text",
                                    "fields": {
                                        "keyword": {
                                            "type": "keyword",
                                            "ignore_above": 256
                                        }
                                    }
                                },
                                "Owned": {
                                    "type": "boolean"
                                }
                            }
                        }
                    }
                },
                "GFRefCode": {
                    "type": "long"
                },
                "GoodsDesc": {
                    "properties": {
                        "FName": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        },
                        "GoodsFullName": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        },
                        "Supplier": {
                            "properties": {
                                "Barcode": {
                                    "type": "text",
                                    "fields": {
                                        "keyword": {
                                            "type": "keyword",
                                            "ignore_above": 256
                                        }
                                    }
                                },
                                "GPackDayPrice": {
                                    "type": "long"
                                },
                                "GoodsEnterDate": {
                                    "type": "date"
                                },
                                "GoodsFinalCode": {
                                    "type": "long"
                                },
                                "GoodsFullName": {
                                    "type": "text",
                                    "fields": {
                                        "keyword": {
                                            "type": "keyword",
                                            "ignore_above": 256
                                        }
                                    }
                                },
                                "GoodsWHStock": {
                                    "type": "long"
                                },
                                "StoreName": {
                                    "type": "text",
                                    "fields": {
                                        "keyword": {
                                            "type": "keyword",
                                            "ignore_above": 256
                                        }
                                    }
                                },
                                "UserName": {
                                    "type": "text",
                                    "fields": {
                                        "keyword": {
                                            "type": "keyword",
                                            "ignore_above": 256
                                        }
                                    }
                                },
                                "WHName": {
                                    "type": "text",
                                    "fields": {
                                        "keyword": {
                                            "type": "keyword",
                                            "ignore_above": 256
                                        }
                                    }
                                },
                                "WareHouseCode": {
                                    "type": "long"
                                }
                            }
                        },
                        "UserName": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        }
                    }
                },
                "GoodsFinalCode": {
                    "type": "long"
                },
                "Images": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "IsMainObject": {
                    "type": "boolean"
                },
                "ObjectDetailPackID": {
                    "type": "long"
                },
                "ObjectKind": {
                    "type": "long"
                },
                "Prices": {
                    "properties": {
                        "Barcode": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        },
                        "GPWeight": {
                            "type": "float"
                        },
                        "GpackDayPrice": {
                            "type": "long"
                        },
                        "PackingName": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        }
                    }
                },
                "RefGoodsFinalCode": {
                    "type": "long"
                },
                "TreePath": {
                    "properties": {
                        "DFieldCode": {
                            "type": "long"
                        },
                        "DFieldRelCode": {
                            "type": "long"
                        },
                        "DFieldVal": {
                            "type": "text",
                            "fields": {
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

}

谢谢。

1 个答案:

答案 0 :(得分:1)

由于索引显示您已将数组另存为对象, 阅读有关此here

的更多信息

基本上,除非另外指定,否则Elasticsearch在保存时会展平数组,从而使数组中的对象失去其结构。 您应该将字段的类型定义为嵌套以避免这种情况。