elasticsearch,hubot,Coffeescript,elasticsearch,Hubot" /> elasticsearch,hubot,Coffeescript,elasticsearch,Hubot" />

Coffeescript 如何在ElasticSearch中组合多个查询

Coffeescript 如何在ElasticSearch中组合多个查询,coffeescript,elasticsearch,hubot,Coffeescript,elasticsearch,Hubot,以下代码仅供参考。我正在尝试制作一个hubot插件,该插件记录到elasticsearch,然后使用hubot命令搜索这些日志 我正在尝试检索与两个查询匹配的记录 { query: { match: { user: "SomeUsername" }, range: { date: { from: (Date.now() - 3600) }

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

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

{ 
  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 > ?

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

如果有人无意中发现了这个问题,并想知道在ElasticSearch中组合匹配和范围查询会是什么样子,那么这个示例应该是这样的

curl 'localhost:9200/<index>/_search?pretty=true' -d '{
  "query" : {
    "bool": {
      "must": [
        {
          "match": {
            "user": "SomeUsername"
          }
        },
        {
          "range" : {
            "date": {
              "gt": "now-1h"
            }
          }
        }
      ]
    }
  }
}'
curl'localhost:9200/\u search?pretty=true'-d'{
“查询”:{
“布尔”:{
“必须”:[
{
“匹配”:{
“用户”:“SomeUsername”
}
},
{
“范围”:{
“日期”:{
“gt”:“现在-1h”
}
}
}
]
}
}
}'

查询是否按照指定的顺序运行?如中所示,范围查询将应用于第一个用户找到的用户?@EvaldasRaisutis我假设是这样的,基于API的选择,在“匹配”中使用列表,但我不确定。