2012-11-12 37 views
11

'da birden çok soruyu nasıl birleştirebilirim? Ben elasticsearch için oturum açan ve daha sonra bu günlükleri aramak için hubot komutları kullanan bir hubot eklentisi yapmaya çalışıyorum. ElasticSearch

https://gist.github.com/4050748

Ben iki sorgu eşleşen kayıtları almak çalışıyorum.

{ 
    query: { 
     match: { 
      user: "SomeUsername" 
     }, 
     range: { 
      date: { 
      from: (Date.now() - 3600) 
      } 
     } 
    }, 
    size: 50 
} 

bekliyordum:

  • 50'ye kadar kayıt
  • kayıtları aldım son saatte

verilen kullanıcı vardı

  • kayıtları:

    • vazgeçmiş kullanıcıyı

    nasıl son bir saatte, bazı kullanıcı adı ile tüm kayıtları alabilirim herhangi bir zamanda gelen

  • vardı
  • kayıtları kayıtları 10? Filtrelerle match_all kullanmam gerekir mi? Desteklenemediğim şey nedir?

    SQL olurdu gibi bir şey: Birlikte farklı sorgular birleştirmek bool query kullanmak gerekir

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

    15

    . Daha sonra, her bir sorgunun eşleşmesi, eşleşmesi (isteğe bağlı) veya eşleşmemesi gerekip gerekmediğini seçebilirsiniz. Bu soru üzerine stumbles ve ElasticSearch bir maç ve aralık sorgusu birleştirmek neye benzediğini merak herkes için

    16

    , bu örnek

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

    burada bana bazı işler Kaydedilen gibi görünecektir - teşekkür ederim! – JohnJ

    +0

    Sorgular, belirtilen sırada çalışır mı? Olarak, aralık sorgu ilk tarafından bulunan kullanıcılar üzerinde uygulanacak? –

    +0

    @EvaldasRaisutis "Eşlemede" bir listeyi kullanmak için API'nın seçimine dayanarak bunu kabul ediyorum ama emin değilim. –