5

以前の質問fieldsで、クエリ内のquery_stringと、それがドキュメントのネストされたフィールドの検索にどのように役立つかを紹介しました。

{
  "query": {
    "query_string": {
      "fields": ["*.id","id"],
      "query": "2"
    }
  }
}

しかし、それはマッチングに対してのみ機能します。比較を行いたい場合はどうすればよいですか? いくつかの読み取りとテストの後、次のようなクエリrangeはサポートしていないようですfieldsrangeドキュメント階層のどこにでも散らばっている可能性のあるフィールドに対して、日付などのクエリを実行する方法はありますか?

つまり、次のドキュメントを検討してください。

{
    "id" : 1,
    "Comment" : "Comment 1",
    "date" : "2016-08-16T15:22:36.967489",
    "Reply" : [ {
        "id" : 2,
        "Comment" : "Inner comment",
        "date" : "2016-08-16T16:22:36.967489"
    } ]
}

ネストされたフィールドのために、アドレスを明示的に指定せずに、指定されたドキュメントに一致するdateフィールド ( など) を検索するクエリはありますか? このようなもの(次のクエリが間違っていることはわかっています):date > '2016-08-16T16:00:00.000000'Reply.date

{
    "query": {
        "range" : {
            "date" : {
                "gte" : "2016-08-16T16:00:00.000000",
            },
            "fields": ["date", "*.date"]
        }
    }
}
4

1 に答える 1

3

クエリ自体はそれrangeをサポートしていませんが、query_string必要なものを達成するために、クエリを (再度) 利用し、フィールドをワイルドカード化できること、および範囲クエリをサポートしているという事実を活用できます。

{
  "query": {
    "query_string": {
      "query": "\*date:[2016-08-16T16:00:00.000Z TO *]"
    }
  }
}

上記のクエリは、Reply.date一致するため、ドキュメントを返します*date

于 2016-08-17T03:48:43.393 に答える