搜索整数汇总列表Elasticsearch

时间:2019-03-28 08:39:11

标签: elasticsearch nested aggregation

我正在设计一个新的索引,并且我的数据中有一些结构,可能会给搜索带来麻烦。

给出文档类型“目录”(将其转换为更通用的设置)

具有以下数据结构

{
  "_id": 1,
  "categories": [
    {
      "category_name": "aaaa",
      "nb_items": 6
    },
    {
      "category_name": "bbbb",
      "nb_items": 5
    }
  ]
},
{
  "_id": 2,
  "categories": [
    {
      "category_name": "cccc",
      "nb_items": 9
    },
    {
      "category_name": "bbbb",
      "nb_items": 2
    }
  ]
}

如何查询所有类别(nb_items按category_names之和)的项目数> 10但类别bbbb中的nb_items> 4的文档,仅检索第一个文档?

使用两个独立的列表类别和nb_items或使用此类嵌套文档会更容易吗?

1 个答案:

答案 0 :(得分:0)

这部充满灵魂的作品。您可以使用过滤器部分中的脚本来设置总的nb条件,但这确实很慢。

  {
      "size": 0,
      "query" : {
    "nested" : {
        "path" : "categories",
        "query" : {
            "bool" : {
                "must" : [
                    {
                        "term" : {"categories.origin" : "bbbb"}
                    },
                    {
                        "range" : {"categories.nb_items" : {"gt" : 4}}
                    }
                ]}
            }
        }
    },
      "aggregations": {
        "totalnbbydoc": {
          "terms": {
            "field": "youriddoc",
            "size": 10000
          },
          "aggregations": {
            "totalByNested": {
              "nested": {
                "path": "categories"
              },
              "aggregations": {
                "nbtotal": {
                  "sum": {
                    "field": "categories.nb_items"
                  }
                }
              }
            },
            "paidAmount_filter": {
              "bucket_selector": {
                "script": {
                  "inline": "params.totalnbbydoc > 10"
                },
                "buckets_path": {
                  "totalnbbydoc": "totalByNested>nbtotal"
                }
              }
            }
          }
        }
      }
    }