使用 Symfony2 + 聚合进行弹性搜索 [复杂]

Elastic Search with Symfony2 + Aggregation [Complex]

Facet Filter Demo

我正在使用 FOSElastica 使用 Elastic search + Symfony2 创建一个搜索页面。我有设置存储库和模型转换和分页非常好。

我有以下几个聚合的地理位置搜索

距离范围

两点之间的时长

类别

location: geo point (default is set by country)

问题

用户会进行多次聚合点击来过滤他们的数据以缩小数据范围。跟踪用户激活的聚合的最佳方式是什么?

以及如何显示控制器和服务方法之间的发送和接收过滤器聚合?

最好只按会话跟踪所有内容吗?

由于默认的 Elasticsearch 响应文档不包含提交的查询,您需要跟踪 MVC 应用程序中的过滤器选择状态,以便正确呈现过滤器控件。

部分选项:

  • 过滤器编码到页面上的表单元素(可能隐藏)中。表单可以通过 Ajax post。
  • 编码成 url 的过滤器(bookmarkable/shareable 搜索的额外好处)
  • 过滤器存储在会话中(不知道为什么你想要这个,但这是可能的)

提交搜索请求后,调用 Elasticsearch 的控制器现在负责将用户的过滤器选择状态传递给 Elastica(与搜索结果一起返回视图)


这种从搜索控制器返回的 回显 过滤器状态非常有用,尤其是当您需要重绘包含搜索过滤器的页面部分时。