我正在尝试创建一个查询,该查询将查询以下映射,以查找具有"句点"要么匹配特定日期,要么缺少它的值(具有空值)。 请注意我正在使用第三方数据库,因此无法更改映射。如果示例数据和映射很大,请耐心等待。我已经尝试过切掉所有不必要的东西了。
{
"EXAMPLE":{
"mappings":{
"company":{
"properties":{
"CompanyData":{
"properties":{
"participantRelations":{
"type":"nested",
"include_in_parent":true,
"properties":{
"participant":{
"type":"nested",
"include_in_parent":true,
"properties":{
"unitNumber":{
"type":"long"
}
},
"organizations":{
"properties":{
"memberData":{
"type":"nested",
"include_in_parent":true,
"properties":{
"attributes":{
"properties":{
"values":{
"properties":{
"period":{
"properties":{
"validFrom":{
"type":"date",
"format":"dateOptionalTime"
},
"validTo":{
"type":"date",
"format":"dateOptionalTime"
}
}
}
"value":{
"type":"string"
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
以下是一些示例数据。我已经将它从它来自的(丹麦语)来源翻译过来,所以任何轻微的错误拼写都只是错误的类型。
{
"company": {
"companyData":{
"participantRelations":[
{
"participant":{
"unitNumber":4003857309
},
"organizations":[
{
"memberData":[
{
"attributtes":[
{
"values":[
{
"value":"chairman",
"period":{
"validFrom":"2014-10-01",
"validTo":"2016-08-11"
}
}
]
},
{
"values":[
{
"value":"generalassembly",
"period":{
"validFrom":"2014-10-01",
"validTo":"2016-08-11"
}
}
]
}
]
}
]
},
{
"memberData":[
{
"attributes":[
{
"values":[
{
"value":"chairman",
"period":{
"validFrom":"2016-08-16",
"validTo":"2017-06-08"
}
},
{
"value":"boardmember",
"period":{
"validFrom":"2017-06-09",
"validTo":null
}
}
]
},
{
"values":[
{
"value":"generalassembly",
"period":{
"validFrom":"2016-08-16",
"validTo":"2017-06-08"
}
},
{
"value":"generalassembly",
"period":{
"validFrom":"2017-06-09",
"validTo":null
}
}
]
}
]
}
]
}
]
}
]
}
}
}
我想要做的事情就像下面的查询一样,它不能正常工作,因为它有一些我不知道的原因无法处理的情况。它需要做的是在特定日期查找任何company.participantRelations.organizations.memberData.attributes.values.period.validTo,或者如果日期为null。现在我知道ES中的空值是时髦的,但我知道日期属性将始终存在,但如果还没有日期,则validTo将设置为null。
此外,它还需要嵌套在组织上,因为我需要一个特定的unitNumber才能出现。
{
"query":{
"nested":{
"filter":{
"bool":{
"must":[
{
"nested":{
"filter":{
"bool":{
"must":[
{
"bool":{
"should":[
{
"range":{
"company.companyData.participantRelations.organizations.memberData.attributtes.values.period.validTo":{
"gte":"2017-08-14T15:23:11.011"
}
}
},
{
"missing":{
"field":"company.companyData.participantRelations.organizations.memberData.attributtes.values.period.validTo"
}
}
]
}
}
]
}
},
"path":"company.companyData.participantRelations.organizations.memberData"
}
},
{
"term":{
"company..companyData.participantRelations.participant.unitNumber":4003857309
}
}
]
}
},
"path":"company.companyData.participantRelations"
}
}
}
此查询有两种情况:
如果有两个条目似乎不起作用,第一个条目的日期早于我的限制,第二个条目的值为空(如示例所示)。
我意识到这有点令人费解,但是对于数据库,我只是查询它的方式。我希望我已经足够简化了你的问题。
提前致谢。