我正在尝试编写一个查询,如果它们在特定数据范围内具有X个访问次数,则只返回文档。即如果它有2次访问,则只返回guid-docA,在2017-01-01"和" 2017-12-31"
**Example Data Documents**
{
"_id": "guid-docA"
"visits": [
{
"name": "Sarah",
"visitDate": "2013-02-27T00:00:00.000Z"
},
{
"name": "John",
"visitDate": "2017-02-27T00:00:00.000Z"
},
{
"name": "Jim",
"visitDate": "2017-12-27T00:00:00.000Z"
}
]
},
{
"_id": "guid-docB"
"visits": [
{
"name": "Brian",
"visitDate": "2013-02-27T00:00:00.000Z"
},
{
"name": "Kerri",
"visitDate": "2016-02-27T00:00:00.000Z"
},
{
"name": "Julia",
"visitDate": "2017-12-27T00:00:00.000Z"
}
]
}
我已经尝试过脚本过滤器,并且如果访问次数大于2,则可以返回数据但是如果他们在给定年份中访问次数超过1(或X),我还没想出如何获取数据。
"filter": {
"script": {
"script": "_source.visits.size() > 1"
}
}
不确定如何为指定的数量应用逻辑。
先谢谢你。
答案 0 :(得分:0)
首先,您需要确保visits
字段为nested
Nested datatype
如果是这样,您可以使用嵌套的bool查询must
子句和minimum_shold_mathc
像这样的东西
"query": {
"nested": {
"path": "visits",
"query": {
"bool": {
"must": [
{
"range": {
"visits.visitDate": {
"gte": "2017-01-01",
"lte": "2017-12-31"
}
}
}
],
"minimum_number_should_match": 2
}
}
}
}