我有一个ElasticSearch索引,数据在底部复制粘贴时被索引。
想法是它有文档,文档的“官方名称”在一个数组中。这是因为该文件的正式名称有效期为一段时间(即2014年至2015年期间名称为X,2016年至2018年之间为Y)。
我想要的是一个简单的查询,它根据name
属性找到文档,但它今天有效。
文档地图:
"Company": {
"properties": {
"vatNumber": {
"type": "string"
},
"names": {
"type": "nested",
"include_in_parent": true,
"properties": {
"name": {
"type": "string"
},
"period": {
"properties": {
"validFrom": {
"type": "date",
"format": "dateOptionalTime"
},
"validTo": {
"type": "date",
"format": "dateOptionalTime"
}
}
},
"lastUpdated": {
"type": "date",
"format": "dateOptionalTime"
}
}
}}}
我的尝试:
我使用NEST(.NET客户端)。我假设有两个总体“挑战”:
name
)validTo
确实null
(并忽略另一个)
数组中的实体)然而,在四处寻找之后,我对这两个人感到非常失望!
答案 0 :(得分:1)
您正在寻找的是嵌套查询,您可以在其中指定嵌套字段的路径(names.name和names.period.validTo here)。要检查字段是否为null,请在bool查询的must_not子句中使用exists查询。这是一个样本
GET / _search
{
"query": {
"nested" : {
"path" : "names",
"query" : {
"bool" : {
"must":{
"term": {
"names.name": "Lars"
}
},
"must_not" :{
"exists": {
"field": "names.period.validTo"
}
}
}
}
}
}
}