【问题标题】:Elasticsearch filter/count nested fieldsElasticsearch 过滤/计数嵌套字段
【发布时间】:2016-09-14 07:52:01
【问题描述】:

我有一个包含如下嵌套字段的文档:

...
"results": [
  {
    "id": "1234",
    "name": "asdf"
  },
  {
    "id": "5678",
    "name": "jklö"
  }
],
"ip": "1.2.3.4"
...

嵌套字段的映射如下所示:

"results": {
  "type": "nested",
  "properties": {
    "id": {
      "type": "string"
    },
    "name": {
      "type": "string"
    }
  }
}

在切换到 elasticsearch 2 之前,我使用 aggs 进行了查询,该查询计算了没有结果的文档。这是查询的聚合部分:

"aggs": {
  "no_result": {
    "filter": {
      "missing": {
        "field": "results"
      }
    },
    "aggs": {
      "count": {
        "value_count": {
          "field": "ip"
        }
      }
    }
  }
}

现在我切换到 elasticserach 2,它只计算所有文档。我已经尝试过不同的方法,比如计算所有文档和计算结果,这样我就可以减去结果,但是

"aggs": {
  "results_count": {
    "value_count": {
      "field": "results"
    }
  }
}

总是 0

如何正确过滤/计算嵌套字段?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    如果您想计算有结果的文档数量,您可以这样做。

    {
      "size": 0,
      "aggs": {
        "count": {
          "nested": {
            "path": "results"
          },
          "aggs": {
            "top_reverse_nested": {
              "reverse_nested": {}
            }
          }
        }
      }
    }
    

    数量将在 top_reserve_nested doc_count 中

    【讨论】:

    • 谢谢你的作品。我仍然认为有/应该有一种方法可以直接计算没有结果的文件,但在我找到它之前,我会接受你的回答。
    【解决方案2】:

    “字段”:“ip”

    应该是 “字段”:“ID”

    【讨论】:

    • 我不确定,因为他正在寻找没有任何结果的文档,ip 可能是根文档级别的字段。
    • @Val 是的,我编辑了我的问题以使其更清楚
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    相关资源
    最近更新 更多