2012-11-12 97 views
11

此处仅供参考是代码。我正在尝试创建一个hubot插件,该插件记录到elasticsearch,然后使用hubot命令来搜索这些日志。如何在ElasticSearch中组合多个查询

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 > ? 
    
  • 回答

    15

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

    16

    对于任何人谁绊倒在这个问题上,并想知道它是什么样子的匹配和范围查询在ElasticSearch结合起来,这个例子看起来像

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

    这里救了我一些工作 - 谢谢! – JohnJ

    +0

    查询是按照它们指定的顺序运行的吗?如范围查询将应用于第一个用户发现的用户? –

    +0

    @EvaldasRaisutis我会基于API的选择来使用“匹配”中的列表,但我不确定。 –