【问题标题】:Elasticsearch aggregation query in elastic.jselastic.js 中的 Elasticsearch 聚合查询
【发布时间】:2015-12-31 16:06:08
【问题描述】:

我很难将用于弹性搜索的 aggregation query 转换为 elastic.js. 我正在阅读文档,但我就是想不通。您可以在网上找到的示例大多是关于已弃用的方面功能,这不是很有用。 JSON 示例聚合如下:

{
  "aggs": {
    "foo": {
      "filter": {
        "bool": {
          "must": [
            {
              "query": {
                "query_string": {
                  "query": "*"
                }
              }
            },
            {
              "terms": {
                "shape": [
                  "wc"
                ]
              }
            }
          ]
        }
      },
      "aggs": {
        "field": {
          "terms": {
            "field": "shape",
            "size": 10,
            "exclude": {
              "pattern": []
            }
          }
        }
      }
    }
  },
  "size": 0
}

【问题讨论】:

  • 您能验证这是否是正确的查询吗?
  • 我不是专家,所以我将查询发送给它以查看它是否有效,是的,它有效并且按预期工作,而 Or Weinberger 提出的查询不起作用。据我了解,它必须为您的聚合过滤,它必须在聚合的“侧面”。其中“查询”字段不在其中,但它的语法与过滤器有点不同。

标签: javascript elasticsearch elasticjs


【解决方案1】:

这就是您将terms aggregation 嵌套到filter aggregationelasticjs 的方式

ejs.Request()
    .size(0)
    .agg(ejs.FilterAggregation("foo").filter(ejs.BoolFilter()
            .must(ejs.TermsFilter('shape', 'wc'))
            .must(ejs.QueryFilter(ejs.QueryStringQuery().query("*"))))
              .agg(ejs.TermsAggregation("field").field("shape").size(10).exclude("my_pattern"))
        )

顺便说一句,您正在过滤shape,然后对其进行aggregations。我不确定你到底在尝试什么。

我发现他们的documentation 非常好,而且他们有一个很棒的tool 来检查您的查询是否有效且正确。这对你有很大帮助

希望这会有所帮助!

【讨论】:

  • 所以这不是我需要的 100% 它为我指明了正确的方向。
  • 那么是否可以在 elastic.js 中表达原始查询?
  • 有可能,我已经编辑了我的答案请看一下,也不需要查询字符串,它正在选择所有内容
  • 感谢工具,它非常有用
【解决方案2】:

您的查询似乎放错了aggs 元素下。试试这个:

{
  "size": 0,
  "query": {
    "bool": {
      "must": [
        {
          "query": {
            "query_string": {
              "query": "*"
            }
          }
        },
        {
          "terms": {
            "shape": [
              "wc"
            ]
          }
        }
      ]
    }
  },
  "aggs": {
    "foo": {
      "terms": {
        "field": "shape",
        "size": 10,
        "exclude": {
          "pattern": []
        }
      }
    }
  }
}

【讨论】:

  • 所以我已经尝试过(elasticsearch 1.7)并且它返回“错误”:“SearchPhaseExecutionException [无法执行阶段[查询],当我将根级别'查询'替换为'过滤器'时它正在工作'。无论如何,问题是关于 elastic.js 语法
猜你喜欢
  • 1970-01-01
  • 2022-01-18
  • 2014-10-22
  • 2014-11-06
  • 2018-12-11
  • 2020-04-03
  • 2019-09-24
  • 2019-12-06
  • 2018-10-01
相关资源
最近更新 更多