多个过滤器和弹性搜索中的聚合

前端之家收集整理的这篇文章主要介绍了多个过滤器和弹性搜索中的聚合前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何使用与弹性搜索中的聚合相关联的过滤器?

官方文档仅给出了filteraggregations的简单示例,并没有对查询dsl的正式描述 – 比较它。与postgres documentation

通过尝试,我发现以下查询,这是通过elasticsearch(没有解析错误)接受,但忽略给定的过滤器:

  1. {
  2. "filter": {
  3. "and": [
  4. {
  5. "term": {
  6. "_type": "logs"
  7. }
  8. },{
  9. "term": {
  10. "dc": "eu-west-12"
  11. }
  12. },{
  13. "term": {
  14. "status": "204"
  15. }
  16. },{
  17. "range": {
  18. "@timestamp": {
  19. "from": 1398169707,"to": 1400761707
  20. }
  21. }
  22. }
  23. ]
  24. },"size": 0,"aggs": {
  25. "time_histo": {
  26. "date_histogram": {
  27. "field": "@timestamp","interval": "1h"
  28. },"aggs": {
  29. "name": {
  30. "percentiles": {
  31. "field": "upstream_response_time","percents": [
  32. 98.0
  33. ]
  34. }
  35. }
  36. }
  37. }
  38. }
  39. }

有些人建议使用查询而不是过滤器。但官方文档通常建议the opposite对精确值进行过滤。查询的另一个问题是:当过滤器提供and时,查询不会。

有人可以指出文档,博客或书籍,它们描述了编写非平凡查询:至少一个聚合加多个过滤器。

我最终使用了 filter aggregation – 未过滤的查询。所以现在我有3个嵌套的aggs元素。

我也使用布尔过滤器,而不是由@ alex-brasetvik推荐,因为http://www.elasticsearch.org/blog/all-about-elasticsearch-filter-bitsets/

我的最终实现:

  1. {
  2. "aggs": {
  3. "filtered": {
  4. "filter": {
  5. "bool": {
  6. "must": [
  7. {
  8. "term": {
  9. "_type": "logs"
  10. }
  11. },{
  12. "term": {
  13. "dc": "eu-west-12"
  14. }
  15. },{
  16. "term": {
  17. "status": "204"
  18. }
  19. },{
  20. "range": {
  21. "@timestamp": {
  22. "from": 1398176502000,"to": 1400768502000
  23. }
  24. }
  25. }
  26. ]
  27. }
  28. },"aggs": {
  29. "time_histo": {
  30. "date_histogram": {
  31. "field": "@timestamp","interval": "1h"
  32. },"aggs": {
  33. "name": {
  34. "percentiles": {
  35. "field": "upstream_response_time","percents": [
  36. 98.0
  37. ]
  38. }
  39. }
  40. }
  41. }
  42. }
  43. }
  44. },"size": 0
  45. }

猜你在找的设计模式相关文章