【发布时间】:2013-07-03 15:17:37
【问题描述】:
我正在尝试构建 ElasticSearch 查询,但没有得到我期望的结果。任何帮助将不胜感激!
映射细节:
我已将代表志愿者机会的文档编入索引。每个机会中都有以下字段:
- opp 的标题,
- 总结,
- 批准状态,以及
- 隐私设置。
此外,每个机会文档都有:
- 一个嵌套的非营利性文档,代表志愿者机会的非营利性主办方,
- 一个或多个嵌套的原因文档,代表机会解决的原因,
- 零个或多个嵌套技能文档,代表志愿者所需的技能,以及
- 零个或多个嵌套轮班文档,表示志愿者可以注册的时间段。
目前,每个嵌套的轮班文档都包含一个嵌套的 calendarBlock 文档,其中包含开始和结束日期时间字段,以及一个用于注册该轮班的最大志愿者人数的字段。
查询
我尝试构建的查询是过滤查询。查询字符串是从 Web 上的表单传入的。然后,我需要以编程方式将至少三个过滤器附加到此查询:
- 条款过滤器仅返回“已批准”的机会:“y”
- 一个条款过滤器,只返回“私人”的机会:“n”
- 一个范围过滤器,仅返回至少有一个班次且日历块结束字段大于当前日期/时间的机会。 (即:过滤掉所有过去的班次。)
前两个过滤器工作正常。第三个是我卡住的地方。我认为这个问题可能与复杂的嵌套结构有关。我尝试了一个嵌套过滤器,但我不确定我是否正确地这样做了。此外,日期字段实际上嵌套了两层。当我尝试查询时,我仍然会得到过去班次的结果。
在没有安排未来轮班的情况下过滤掉所有机会的正确方法是什么?
【问题讨论】:
-
预期的点击率是多少?您实际获得了什么?另外几个链接将非常容易可视化。 :)
-
你能发布你的映射吗?此外,当您只有一个对象(例如您的非营利领域)时,也不需要
type: nested。仅当您想要对子文档列表执行查询时,您才使用嵌套文档,当查询的所有部分在一个子文档中匹配时,您希望在其中命中 -
pastle 链接不再有效。