我正在尝试构建一个 ElasticSearch 查询,但没有得到我期望的结果。任何帮助将非常感激!
映射细节:
我已经索引了代表志愿者机会的文件。每个机会中都有以下字段:
- opp的标题,
- 概括,
- 批准状态,以及
- 隐私设置。
此外,每个机会文件都有:
- 一份嵌套的非营利文件,代表志愿者机会的非营利主办方,
- 代表机会解决的原因的一个或多个嵌套原因文档,
- 零个或多个嵌套技能文档,代表志愿者所需的技能,以及
- 零个或多个嵌套轮班文档,表示志愿者可以注册的时间段。
目前,每个嵌套的班次文档都包含一个嵌套的 calendarBlock 文档,其中包含开始和结束日期时间字段以及可以注册该班次的最大志愿者人数的字段。
查询
我尝试构建的查询是过滤查询。查询字符串是从 Web 上的表单传入的。然后,我需要以编程方式将至少三个过滤器附加到此查询:
- 一个条款过滤器,只返回“已批准”的机会:“y”
- 一个条款过滤器,只返回“私人”的机会:“n”
- 一个范围过滤器,仅返回至少有一个班次且日历块结束字段大于当前日期/时间的机会。(即:过滤掉所有过去的班次。)
前两个过滤器工作正常。第三个是我卡住的地方。我认为这个问题可能与复杂的嵌套结构有关。我尝试了一个嵌套过滤器,但我不确定我是否正确地这样做了。此外,日期字段实际上嵌套了两层。当我尝试查询时,我仍然得到过去班次的结果。
在没有安排未来轮班的情况下过滤掉所有机会的正确方法是什么?