2012-11-12 13 views
11

参照するコードはこちらです。私はelasticsearchにログを記録し、hubotコマンドを使ってこれらのログを検索するhubotプラグインを作ろうとしています。ElasticSearchで複数のクエリを組み合わせるには

https://gist.github.com/4050748

私は2つのクエリに一致するレコードを取得しようとしています。

私は期待していた
{ 
    query: { 
     match: { 
      user: "SomeUsername" 
     }, 
     range: { 
      date: { 
      from: (Date.now() - 3600) 
      } 
     } 
    }, 
    size: 50 
} 

:指定したユーザーに最後の時間で

  • 記録
  • を持っていた

    • 50件のまでのレコードをレコードは私が得た:

      • 10までのレコードを
      • 任意の時点から、特定のユーザー
      • を持っていた記録

      私は過去1時間にいくつかのユーザ名を持つすべてのレコードを取得するにはどうすればよいですか?フィルターでmatch_allを使用する必要がありますか?私は何をしようとしているのですか? SQLで

      それはようなものになるだろう:あなたが一緒に別のクエリを組み合わせることbool queryを使用する必要が

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

    答えて

    15

    。次に、各単一の照会が一致する必要があるか、一致するか(オプション)、一致しないかを選択できます。この質問につまずくと、それはElasticSearchにマッチし、範囲クエリを結合するためにどのように見えるか不思議誰のための

    16

    、この例では、

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

    ようになりますが、ここで私はいくつかの作業を保存 - あなたに感謝します! – JohnJ

    +0

    クエリは指定された順序で実行されますか?のように、最初のクエリで見つかったユーザーに範囲クエリが適用されますか? –

    +0

    @EvaldasRaisutis "match"でリストを使用するAPIの選択に基づいていると思いますが、わかりません。 –

    関連する問題