【问题标题】:Query the number of elements matching a filter using elastic.js?使用 elastic.js 查询匹配过滤器的元素数量?
【发布时间】:2014-04-25 04:43:08
【问题描述】:

我正在使用 elasticsearch 构建排行榜。我想使用以下查询查询所有分数大于给定数量的文档:

{
"constant_score" : {
    "filter" : {
        "range" : {
            "totalPoints" : {
                "gt": 242
            }
        }
    }
}

这非常有效——elasticsearch 会适当地返回所有点数大于 242 的文档。但是,我真正需要的只是匹配此查询的元素数。由于我通过网络发送结果,因此如果查询只返回计数,而不是所有与过滤器匹配的文档,这将很有帮助。

如何让 elasticsearch 只报告匹配过滤器的文档数?

编辑:我了解到我正在寻找的是将search_type 设置为count。但是,我不确定如何使用 elastic.js 执行此操作。有没有节点愿意提出他们的建议?

【问题讨论】:

    标签: node.js elasticsearch elasticjs


    【解决方案1】:

    您可以将查询类型计数用于该目的:

    http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-search-type.html#count

    这是一个可以帮助你的例子:

    GET /mymusic/itunes/_search?search_type=count
    {
      "query": {
        "filtered": {
          "query": {
            "match_all": {}
          },
          "filter": {
            "range": {
              "year": {
                "gt": 2000
              }
            }
          }
        }
      }
    }
    

    【讨论】:

    • 嗨杰特罗!我看到了那个文档,但我不确定如何将它与范围过滤器一起使用。你介意提供一个例子吗?
    • 再澄清一点:我使用的是弹性搜索适配器,它只让我控制传递给弹性搜索的查询 JSON。有没有办法在 JSON 查询中传递search_type
    • 感谢您的示例 Jettro。在 URL 中传递 search_type 是唯一的方法吗?我正在为节点使用 elasticsearchclient,如果我可以在查询 JSON 中传入search_type,那就太棒了。
    • 不,这来自elasticsearch手册:在上述之外,search_type是不能在搜索请求正文中传递的,为了设置它,它必须传递作为请求 REST 参数。
    • 我明白了。有没有办法用 elastic.js 以编程方式传递它?我正在重新标记我的问题,希望节点程序员可以看到这一点。
    猜你喜欢
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 2011-05-13
    • 2012-03-12
    • 2013-11-12
    • 1970-01-01
    相关资源
    最近更新 更多