【问题标题】:How do I combine multiple queries in ElasticSearch如何在 ElasticSearch 中组合多个查询
【发布时间】:2012-11-01 08:59:12
【问题描述】:

这里是代码供参考。我正在尝试制作一个 hubot 插件,该插件可以记录到 elasticsearch,然后使用 hubot 命令来搜索这些日志。

https://gist.github.com/4050748

我正在尝试检索匹配两个查询的记录。

{ 
  query: { 
        match: {
          user: "SomeUsername" 
        }, 
        range: {
          date: {
            from: (Date.now() - 3600) 
          }
        }
  },
  size: 50 
}

我期待:

  • 最多 50 条记录
  • 具有给定用户的记录
  • 最近一小时的记录

我明白了:

  • 最多 10 条记录
  • 具有给定用户的记录
  • 任何时候

如何获取过去一小时内使用某个用户名的所有记录?我需要将 match_all 与过滤器一起使用吗?我的尝试不受支持吗?

在 SQL 中会是这样的:

Select (*) from messages where user_name = ? and time > ?

【问题讨论】:

    标签: coffeescript elasticsearch hubot


    【解决方案1】:

    对于任何偶然发现这个问题并想知道在 ElasticSearch 中结合匹配和范围查询是什么样子的人,这个示例看起来像

    curl 'localhost:9200/<index>/_search?pretty=true' -d '{
      "query" : {
        "bool": {
          "must": [
            {
              "match": {
                "user": "SomeUsername"
              }
            },
            {
              "range" : {
                "date": {
                  "gt": "now-1h"
                }
              }
            }
          ]
        }
      }
    }'
    

    【讨论】:

    • 查询是否按照指定的顺序运行?如中,范围查询将应用于第一个找到的用户?
    • @EvaldasRaisutis 我会根据 API 的选择来假设在“匹配”中使用列表,但我不确定。
    【解决方案2】:

    您需要使用bool query 将不同的查询组合在一起。然后,您可以选择每个查询是必须匹配、应该匹配(可选)还是不能匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 2015-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      相关资源
      最近更新 更多