2012-11-12 75 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的選擇來使用「匹配」中的列表,但我不確定。 –