タイムスタンプフィールドの範囲を使用して弾性検索でクエリを作成しました。私は各グループの最新のタイムスタンプを見つける必要があります。最初にクエリを実行し、次に名前フィールドでグループ化し、最新のタイムスタンプを選択しようとします。しかし、それは動作していません。どんな提案も感謝しています。以下は、私は郵便配達からの検索後のクエリのために使用私のJSONがあるelasticsearch - 集計で最新のタイムスタンプを検索しようとしています
{ "クエリ":{ "範囲":{ "タイムスタンプ":{ "GTE": "2016-10-05T15:00:35" 、 "LTE": "2016-10-06T15:10:35"}}} 、あなたはあなたの例のように、あなたはできる、それを行うためのtop-hits集約を使用することができます
"aggs" : {
"groupbyname" : {
"terms" : {
"field" : "name"
},
"aggs" : {
"selectlatesttimestamp" : {
"max" : {
"field" : "timestamp"
}
}
}
}
}
}
感謝それはうまくいくはずですが、なんらかの理由でその時間範囲で同じ名前の複数のドキュメントが返されています。私はそれがタイムスタンプを定義しているかそれをマッピングした方法で何か他のものであるかどうか疑問に思います。ここでJSONは、「名前」と「タイムスタンプ」を珍しく定義しなかった...「名前」:{ "type": "string" } "timestamp":{ "type": "date" 、 "形式": "strict_date_optional_time || epoch_millis" – BZelasky
これは私の結果セットを取得する方法です。https://jsonblob.com/57f69a7ee4b0bcac9f7b677d私にはうまく見えますが、最新のタイムスタンプを持つグループごとに1つのドキュメントがあります。あなたの 'name'フィールドも' 'index ':" not_analyzed "'に設定する必要があります。それ以外の場合、Elasticsearchは内容をトークン化して余分なバケットを作成しますので、 'name:" new york "それは2つのバケツを表示します.1つは「新しい」と1つは「ヨーク」です。 –