13

参考までにここにコードがあります。私はelasticsearchにログを記録し、hubotコマンドを使用してそれらのログを検索するhubotプラグインを作成しようとしています。

https://gist.github.com/4050748

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

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

私は期待していました:

  • 最大50レコード
  • 特定のユーザーがいたレコード
  • 過去1時間の記録

私が得た:

  • 最大10レコード
  • 特定のユーザーがいたレコード
  • いつでも

過去1時間に、あるユーザー名を持つすべてのレコードを取得するにはどうすればよいですか?フィルタでmatch_allを使用する必要がありますか?私が試みていることはサポートされていませんか?

SQLでは、次のようになります。

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

2 に答える 2

19

この質問に出くわし、ElasticSearchで一致クエリと範囲クエリを組み合わせるとどうなるか疑問に思う人にとって、この例は次のようになります。

curl 'localhost:9200/<index>/_search?pretty=true' -d '{
  "query" : {
    "bool": {
      "must": [
        {
          "match": {
            "user": "SomeUsername"
          }
        },
        {
          "range" : {
            "date": {
              "gt": "now-1h"
            }
          }
        }
      ]
    }
  }
}'
于 2015-01-12T17:26:13.953 に答える
15

異なるクエリを組み合わせるには、 boolクエリを使用する必要があります。次に、各単一クエリが一致する必要があるか、一致する必要があるか(オプション)、または一致しないようにするかを選択できます。

于 2012-11-13T08:51:31.963 に答える