代码之家  ›  专栏  ›  技术社区  ›  Vincent Chalmel

整数聚合表的搜索

  •  0
  • Vincent Chalmel  · 技术社区  · 7 年前

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

    给定文档类型“catalog”(将其转换为更一般的设置)

    使用以下数据结构,

    {
      "_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_项之和)项数为10但bbbb类别中的nb_项数为4的文档以仅检索第一个文档?

    使用两个独立列表类别和nb_项或使用这样的嵌套文档会更容易吗?

    0 回复  |  直到 7 年前
        1
  •  0
  •   LeBigCat    7 年前

    这是我们的工作。你可以用过滤部分的脚本创建total 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"
                    }
                  }
                }
              }
            }
          }
        }