13

这里是代码供参考。我正在尝试制作一个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 > ?
4

2 回答 2

19

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

curl 'localhost:9200/<index>/_search?pretty=true' -d '{
  "query" : {
    "bool": {
      "must": [
        {
          "match": {
            "user": "SomeUsername"
          }
        },
        {
          "range" : {
            "date": {
              "gt": "now-1h"
            }
          }
        }
      ]
    }
  }
}'
于 2015-01-12T17:26:13.953 回答
15

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

于 2012-11-13T08:51:31.963 回答